假设我有一个 C 结构定义如下:
typedef struct
{
double array1[2];
} struct0_T;
内存是怎么布局的? struct 是只保存一个指针还是两个 double 的值?之前我认为该结构包含一个指针,但今天我发现(令我惊讶的是)值存储在那里。不同的编译器之间是否有所不同?
最佳答案
该结构包含两个值。内存布局是 .array1[0]
,然后是 .array1[1]
,后面可以选择一些填充量。
填充是其中唯一可以因编译器而异的部分(尽管在实践中,结构的唯一成员是数组,几乎可以肯定没有填充)。
虽然您可能听说过 C 中的数组是指针,但事实并非如此 - 数组是由所有成员对象组成的聚合类型,就像结构一样。只是在几乎所有表达式上下文中,数组的计算结果都是指向其第一个成员的指针。
关于c - 带数组的 C 结构的内存布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29798894/