规范上下文中的 C 结构大小

C structures size in context of specification

有没有熟悉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语言规范,为什么这样解决

声明

int a[5];

在这里你声明了一个 5 int 的数组

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

对于

int *a;

在这里你声明了一个指针(指向一个 int 类型的 case),它保存了一个内存地址,所以对于 32 位架构,地址可以写成 32 位,但在其他具有 64 位架构的系统中,地址内存只能写48位,主要是因为够用

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