0

void ポインターが渡される関数があります。このポインターは、int、char、または float のいずれかです。関連付けられた値によってどのデータ型が渡されるかを知っています。たとえば、以下は私の関数がどのように見えるかです:

void * (int type, void * data);

渡された void ポインターがもともと char 型で、それを char 型にキャストし直した場合、そのポインターに関連付けられているバイト数を特定する方法はありますか? たとえば、関数が次のように呼び出された場合:

f(1, (void *)"Hello world");

そして、void ポインターを char ポインターにキャストし直します。

char * p = (char *)data;

使用されたバイト数を把握する方法はありますか? ヌル文字を検索して、元のポインタから何バイト離れているかを数えなければならないでしょうか? int と float のサイズも調べるにはどうすればよいですか?

4

1 に答える 1

2

ヌル文字を検索して、元のポインタから何バイト離れているかを数えなければならないでしょうか?

はい、あなたvoid*が実際にchar*これが機能する場合。

int と float のサイズも調べるにはどうすればよいですか?

intいつものようにfloat同じサイズです (アーキテクチャによって異なりますが、通常は 32 ビットまたは 64 ビットです。sizeof演算子を使用して正確なサイズを決定してください)。void*その長さを見つける方法がないため、int の配列を渡している場合。

通常、これらの場合、関数にもサイズを渡すのが妥当です。

于 2013-02-03T00:32:12.810 に答える