首页 > 解决方案 > 为什么整数数组 size(array) 的返回值只是元素个数的 4 倍?

问题描述

例如,如果我执行以下操作,

int array[5] = {1, 2, 3, 4, 5};
printf("%d", sizeof(array));

它将返回 4 次 # 的元素,即 5 = 20。

但我的问题是数组不需要指针吗?(地址)如果是这样,由于指针的大小为 8 个字节,为什么它不包含在大小中?

标签: carrayspointers

解决方案


但我的问题是数组不需要指针吗?(地址)

没有。数组只是一个对象序列——在这种情况下,是一个 5 的序列int

       +–––+
array: | 1 | array[0]
       +–––+
       | 2 | array[1]
       +–––+
       | 3 | array[2]
       +–––+
       | 4 | array[3]
       +–––+
       | 5 | array[4]
       +–––+

没有为任何指针留出空间 -表达式 array将被转换(“衰减”)为指针表达式,以便它计算为第一个元素的地址(除非它是sizeofor 或一元运算符的操作数&)。

如果是这样,既然指针的大小为 8 个字节,为什么不包含在大小中?

不要假设指针具有特定的大小——仍然有 16 位和 32 位系统在使用,指向不同类型的指针不必具有相同的大小和表示形式。整个世界都不是 VAX x86-64。


推荐阅读