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 のサイズも調べるにはどうすればよいですか?