有这个简单的代码:
#include <stdio.h>
typedef struct
{
int a;
char c;
} foo;
void func(void *arg)
{
printf("sizeof arg: %ld\n", sizeof(*arg));
}
int main()
{
foo f = {6, 'c'};
func(&f);
printf("the real sizeof struct foo: %ld\n", sizeof(f));
}
输出:
sizeof arg: 1
the real sizeof struct foo: 8
如您所见,该函数显示了错误的结果。如果原因是invalid application of ‘sizeof’ to incomplete type ,那为什么会显示sizeof arg: 1
呢? void
不是1
字节长,而是类型不完整,为什么会这样呢?
最佳答案
您正在尝试获取 C 标准不允许的 void
的大小。但是,某些实现将 sizeof(void)
定义为 1,这就是您在此处看到的。
该函数无法知道您传递给它的 void *
实际上是一个 foo *
。您将需要一些其他方式来传达该信息。
https://stackoverflow.com/questions/66000788/