arr [0]的大小是多少?

时间:2014-09-15 13:39:02

标签: c

以下是代码

#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]具有相同的尺寸。

6 个答案:

答案 0 :(得分:5)

使用[]索引数组时,类型是数组元素的类型,在这种情况下,double用于两个数组。如果没有索引(即sizeof(arr)),则类型将是数组的类型。

答案 1 :(得分:2)

你甚至没有真正地看arr_one,也没看arr。您正在使用数组arr来获取其元素(double)的大小,当然这些元素是相同的。

答案 2 :(得分:2)

不允许使用零大小的数组,因此代码不应该编译。

如果您的编译器接受它作为非标准扩展,那么结果sizeof仅取决于表达式的类型;在这种情况下double。表达式未被计算(因此,如果它涉及越界数组访问或其他未定义的行为并不重要),并且无论它是否具有明确定义的值,其类型都是相同的。< / p>

如果要询问数组的大小sizeof(arr),那么这将取决于编译器如何选择处理非标准的零大小数组。由于不规范,没有标准规格。

答案 3 :(得分:1)

数组只是一块内存,所有元素都在后面。

考虑下一个char数组而不是双数:

char* text = "Hello World!";

char* begin = text;
char* end = text + strlen( text ) - 1;

while( begin++ < end )
    printf( *begin );

注意同一事项的char* begin = text或文本声明者本身。在printf中,您将取消引用指向第一个元素*begin = *text = 'H'的开始指针。

声明数组时,始终会分配最小的部分,即类型的大小。

下一个可能/将等于char text[0],但随后可编译。

char* text = "";

答案 4 :(得分:0)

它们是相同的,因为您正在查看两个数组的第一个元素的大小。

尝试sizeof(arr)sizeof(arr_one),这是数组的大小。

答案 5 :(得分:0)

sizeof() double类型为8,这就是为什么你得到8,8。数组arr[0]始终引用为double类型的下标变量,arry_one[1]也引用double类型的值,因此输出8,8。