sizeof运算符在c中显示错误的结构大小
有这个简单的代码:
#include <stdio.h>
typedef struct
{
int a;
char c;
} foo;
void func(void *arg)
{
printf("sizeof arg: %ldn", sizeof(*arg));
}
int main()
{
foo f = {6, 'c'};
func(&f);
printf("the real sizeof struct foo: %ldn", sizeof(f));
}
输出:
sizeof arg: 1
the real sizeof struct foo: 8
如您所见,该函数显示错误的结果。如果原因是“sizeof”对不完整类型的无效应用,那么为什么会显示sizeof arg: 1?void不是1字节长,而是不完整的类型,那么为什么会出现这个结果呢?
回答
您正在尝试获得voidC 标准不允许的大小。但是,某些实现定义sizeof(void)为 1,这就是您在此处看到的。
该函数无法知道void *您传递给它的实际上是一个foo *. 您将需要一些其他方式来传达该信息。