有人熟悉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语言规范一致,为什么这样解决。
答案 0 :(得分:0)
int a[5];
这里你要声明一个5 int
的数组所以sizeof(a) == sizeof(int)*5
代表
int *a;
这里你要声明一个指针(指向int类型的情况),它保存一个内存地址,因此对于32位架构,地址可以用32位写入,但在64位架构的其他系统中,内存的地址可以仅以48位写入,主要是因为它足够
这就是为什么你在这种情况下得到sizeof(a)
值4
这意味着你的系统将地址存储在内存中32位