没有初始化的数组变量发生了什么?


#include<stdio.h>
int main(void)
{
    int a[3]={1,2,3};
    printf("%d",a[4]);
}

这个程序的输出是0,即使我没有初始化a[4]。作为一个已初始化的数组,如果我尝试访问它,应该会得到一个错误。

这可能是什么原因呢?

您正在读取超出数组末尾的内容。它的值恰好是0。当您这样做时会发生什么是由c语言未定义的。在这种情况下,编译器和运行时可以做任何他们想做的事情,包括返回0或给你一个错误。

单行:结果将是indeterminate

6.7.9 Initialization (p10):

如果没有显式初始化具有自动存储持续时间的对象,则其值为不定 .

3.19.2:不确定值

一个未指定的值或一个陷阱表示

最新更新