规范上下文中的 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 位
有没有熟悉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 位