【发布时间】:2018-04-05 16:32:14
【问题描述】:
C 中未初始化数组的结果从何而来?它们是随机分配的值还是只是存储在内存中的先前值?
#include <stdio.h>
int main (void)
{
int values[10];
int index;
values[0] = 197;
values[2] = -100;
values[5] = 350;
values[3] = values[0] + values[5];
values[9] = values[5] / 10;
--values[2];
for ( index = 0; index < 10; index++ )
printf ("values[%i] = %i\n", index, values[index]);
return 0;
}
和输出:
$ ./a.exe
values[0] = 197
values[1] = 0
values[2] = -101
values[3] = 547
values[4] = 8
values[5] = 350
values[6] = 51
values[7] = 0
values[8] = 44045216
values[9] = 35
【问题讨论】:
-
是的,这是正常的未定义行为。
-
它们没有被初始化并且偶然有一些价值。有什么不清楚的地方?
-
int values[10];是一个自动变量,分配在栈上。默认情况下,自动变量不初始化为零;你必须自己做。 -
很抱歉给您的印象是您的问题冒犯了我。只是似乎不清楚。顺便问一下,你知道stackoverflow.com/help/someone-answers 吗?但是,如果您发现最佳答案实际上是 Ian Abbott 的评论(我愿意;通过对“未定义行为”一词的一些支持性研究),您无需接受以下任何答案。
-
C 专为速度而设计。自动将变量初始化为零需要时间。如果你需要初始化一些,你可以。如果你不需要初始化它们,编译器不会浪费时间。
标签: c arrays variables uninitialized-constant