void 指针中的字节数

Nao*_*uda 1 c pointers void-pointers

假设我有一个 C 函数:

Func(void* param);
Run Code Online (Sandbox Code Playgroud)

有没有办法知道参数内容的字节数?

klu*_*utt 5

不,这是不可能的。这就是为什么几乎所有将指针作为参数的函数都有一个额外的大小参数。应该是这样的:

void func(void *param, int size);
Run Code Online (Sandbox Code Playgroud)

另请注意,由函数来解释size参数。它可以是字节数、元素数或其他任何内容。

这里要记住的重要事情是唯一的事情param,就是一个内存地址。不多也不少。

某些功能不使用此功能。一个例子是strcpy(char * dest, char * src)复制一个字符串,但这个函数假设两件事。它假定这src是一个以零结尾的字符串。strcpy将读取src直到它击中一个'\0'字符。此外,它假设dest指向一个足够大的内存位置来保存字符串。

sizeof(*param)不管用。param只是一个指向内存块开始位置的指针。这将与使用相同sizeof(void)