c - struct 内部的 sizeof struct

标签 c struct

struct S1
{
    char c;
    int i;
};

struct S3
{
    char c1;
    struct S1 s;
    double c2;
};

我正在尝试计算sizeof(S3),从我的程序中它是24。我不知道的是struct S1 在S3 中的偏移量,这个偏移量有什么规则吗?我认为“S1 的偏移量必须是其自身大小的 N 倍,即 N * sizeof(S1)”,然而,我发现这不是真的。感谢您的帮助。

最佳答案

C 标准在这方面有意灵活。

它只保证 (i) struct 中第一个元素的地址与 struct 的地址相同,以及 (ii) 数据成员按照它们在 struct 中声明的顺序出现。 (iii) 一个空的 struct 将有一个非零的 sizeof。最后一个意味着指针运算在空结构上有效。

特别是,允许​​在任何结构成员之间和末尾插入填充(任意数量)。

关于c - struct 内部的 sizeof struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38331002/

相关文章:

c - 使用 appsink 提取样本信号

c++ - C OpenMP并行quickSort

C 自由结构体指针

go - Type.Field 和 Value.Field 有什么区别?

c++ - 在C++中初始化结构的成员变量

c++ - int 的大小是否取决于编译器和/或处理器?

c - 如何使用 ALSA 在缓冲区中录制声音

c - 添加新代码时程序停止工作

pointers - 需要帮助通过 'reflect: NumField of non-struct type'

c++ - 在声明末尾或在 main 中声明结构或类的实例之间的区别?