c - sizeof 运算符在 c 中显示错误的结构大小

有这个简单的代码:

#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/

相关文章:

flutter - 具有动态高度的动画容器 Flutter

c++ - 具有覆盖的嵌套类如何工作?

c++ - 为什么C中总是有main函数?

java - 如果有 happens-before 保证,让 "this"在构造函数的最后一个语句中

list - 从列表中获取元素 Terraform

powershell - 如何在 Powershell 中对 3000 万条 csv 记录进行排序

swift - SwiftLint 的开关大小写格式问题

c - 程序输出说明

reactjs - 强制 react 功能组件触发重新渲染

c++ - 为什么 std::ranges::view_interface 使用 CRTP