2016-05-31 8 views
0

としての機能を与えられたすべてのデータタイプを受け入れるようにvoid* function_ptr(void *ptr, int size);汎用関数が

void *ptrがvoidポインタで

sizeとして(それは内部malloc()使用できる)数であり、リターンでは、メモリは、に応じて割り当てる必要データ型intの場合は4*size(considering 32 bit)charの場合は1*sizeに割り当てる必要があります。 例えば、整数データ型の

function_ptr((void *)some_int_ptr, 10)
10 *4(32 bit) = 40 bytes
function_ptr((void *)some_char_ptr, 10)を割り当てる必要があり、10バイトが割り当てられるべき

質問がどのようにint/char/doubleポインタにvoid *を型キャストすることができるされています関数はどのデータ型がvoid*に型キャストされているか分からないため?

それは、私は、データの種類に言及し、それゆえ我々は割り当て、メモリを割り当てることができますが、

void* function_ptr(void *ptr, int size, int data_type);

+1

'#define allocate(pret、len)malloc((len)* sizeof *(pret))'? 'void *'にキャストすると、sizeof(* ptr)== _Alignof(* ptr)とみなされます。 – a3f

+3

インタビューの質問は何ですか? –

+0

@ n.m。 :空のポインタとサイズをとり、サイズとデータ型に応じてメモリを割り当てます。intと10の場合は40バイト、charと10の場合は10バイトを割り当てます。 – ashish

答えて

0

として受け入れられていなかった1つの以上のパラメータを送信するよう面接の質問に答える試みたあなたが知っていることはできません利用可能な型情報がないので、関数内からのデータ型。次の2つのオプションがあります。

1)関数をバイトのサイズで動作させるか、型を知る必要はありません。おそらく、これは実際に面接官が意味したものでしょうか?

2)関数を型情報がどこかに含まれるように書き直します。

グローバル変数を使用するか、関数をラッパーマクロで置き換えるなどの悪い選択肢もありますが、どちらも推奨されていません。

関連する問題