C结构尺寸符合规范

时间:2015-01-24 02:48:07

标签: c arrays structure

有人熟悉C语言规范并能解释C中结构的概念吗?我一直认为C中的数组总是一个指针(即32位系统中的4个字节的数据),但在结构的上下文中存在细微差别。

当您使用常量大小的数组定义结构(例如int ns[5])时,结构的大小为5*sizeof(int) = 20个字节。我预测它只有4个字节。当您通过值传递结构时,您将创建一个全新的结构以及该数组中的数据。

另一方面,如果您的结构具有动态大小数组(例如int * ns),则大小仅为预测的sizeof(int *) = 4字节。

您可以在此处查看并尝试源代码:http://ideone.com/8gQhZT我在哪里打印:

printf("Size of static = %d and size of the dynamic = %d", sizeof(a), sizeof(b));

用于静态和动态结构。

我想知道它是否与C语言规范一致,为什么这样解决。

1 个答案:

答案 0 :(得分:0)

声明的

int a[5];

这里你要声明一个5 int

的数组

所以sizeof(a) == sizeof(int)*5

代表

int *a;

这里你要声明一个指针(指向int类型的情况),它保存一个内存地址,因此对于32位架构,地址可以用32位写入,但在64位架构的其他系统中,内存的地址可以仅以48位写入,主要是因为它足够

这就是为什么你在这种情况下得到sizeof(a)4这意味着你的系统将地址存储在内存中32位