在c中创建的数组不是空的?

itz*_*bby -2 c

我刚刚创建了一个大小为10的数组

int array[10];
Run Code Online (Sandbox Code Playgroud)

之后我想检查数值

for(int i = 0; i < 10; i++){
printf("%d\n", array[i]);
}
Run Code Online (Sandbox Code Playgroud)

但产量与我的预期不同.我虽然所有值都应为0,但输出结果如下:

1996260900
1
0
1995115336
78836
78796
0
68600
0
0
Run Code Online (Sandbox Code Playgroud)

这是为什么?
提前致谢!

Som*_*ude 10

未初始化的本地和非静态变量(数组与否)的内容是不确定的,看起来几乎是随机的.不要试图使用这些值.

如果要初始化值,则需要明确地执行此操作,如

int array[10] = { 0 };  // Will initialize all elements to zero
Run Code Online (Sandbox Code Playgroud)

然后有点挑剔你使用术语"空"和数组:数组永远不会 "空".如果您定义了一个包含十个元素的数组,那么它将始终具有十个元素.

请记住,C没有任何"空值"概念.一切都有一个值,可能由你初始化或设置,或者它是未初始化的,在这种情况下,值是不确定的.


H.S*_*.S. 8

来自C标准#6.7.9p10:

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

要初始化数组的所有元素0,您可以执行以下操作:

int array[10] = {0};
Run Code Online (Sandbox Code Playgroud)

int具有静态或线程存储持续时间且未显式初始化的类型对象初始化为zero.所以,你可以期望所有的数组元素的值array0只有在情况下,如果有静态存储期限,否则数组的元素的值array将是不确定的,你必须有明确的初始化它们0.