下面是代码
#include <stdio.h>
int main()
{
double arr[0];
double arr_one[1];
printf("%d, %d",sizeof(arr[0]), sizeof(arr_one[1]));
return 0;
}结果:
8,8我想知道为什么arr[0]和arr_one[1]有相同的尺寸。
发布于 2014-09-15 13:41:13
当使用[]索引数组时,类型是数组元素的类型,在本例中,这两个数组的类型都是double。如果没有索引(即sizeof(arr)),类型将是数组的类型。
发布于 2014-09-15 13:43:24
您甚至没有看到arr_one,也没有真正的arr。您正在使用数组arr来获取它的元素(double)的大小,这些元素当然是相同的。
发布于 2014-09-15 13:45:45
不允许零大小数组,因此代码不应该编译.
如果您的编译器接受它为非标准扩展,那么结果sizeof只取决于表达式的类型;在本例中是double。表达式不进行计算(因此,它是否涉及到非界限数组访问或其他未定义行为并不重要),而且它的类型是相同的,不管它是否具有定义良好的值。
如果您要询问数组的大小,sizeof(arr),那么这将取决于编译器选择如何处理非标准的零大小数组。由于非标准,没有关于其大小的标准规格.
https://stackoverflow.com/questions/25849450
复制相似问题