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: 1void不是1字节长,而是不完整的类型,那么为什么会出现这个结果呢?

回答

您正在尝试获得voidC 标准不允许的大小。但是,某些实现定义sizeof(void)为 1,这就是您在此处看到的。

该函数无法知道void *您传递给它的实际上是一个foo *. 您将需要一些其他方式来传达该信息。


以上是sizeof运算符在c中显示错误的结构大小的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>