数组未在C ++中初始化时的奇怪数字

时间:2015-06-08 21:19:16

标签: c++ arrays

编辑:^^^"重复"根本没有提到阵列 EDIT2:坚持使用C语言,而不是C ++,两种语言之间是否存在差异?!

这个问题最近一直困扰着我。谷歌搜索没有透露任何内容。

所以我有一段示例C ++代码:

int factors[100]; /* note this is not initialized */
int number = /* less than 100 */ 10;
for (int i = 0; i < number; i ++) {
    factors[i] = 1;
}
for (int i = 0; i < 100; i ++) {
    std::cout << factors[i] << std::endl;
}

输出(向下滚动到底部)

1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1640775680
32767
114023525
624860211
174064279
236792104
-1027703263
587262357
1599638600
32767
17
0
1
0
6778984
1
1640935824
32767
1599638352
32767
1640780406
32767
1599638384
32767
1599638384
32767
1
0
1599638408
32767
6778880
1
1640776264
32767
1599638424
32767
0
0
0
0
0
0
0
0
0
0

为什么它不是10个1或10个1和90个0,为什么有这么多看似随机(可能与2?的数量有关)的数字呢?我认为它可能与内存分配或某些事情有关,但我只是一个初学者而且我还没有进入这个领域。

3 个答案:

答案 0 :(得分:3)

如果您有声明

int factors[100]; /* note this is not initialized */

有两种情况:

  1. 当声明为全局(文件范围)变量时,整个数组将在程序启动前初始化为零。

  2. 当声明为 local (函数范围)变量时,该数组未初始化并包含不可预测的数字。

答案 1 :(得分:2)

未初始化的数组充满了垃圾值。垃圾值是在用户请求之前该特定内存位置中存在的值。内存位置始终存在。在许多情况下,输出为0,因为编译器显式写入defualt值在返回这些位置之前。但C / C ++编译器并不总能表现出这种行为,因此存在各种输出。

答案 2 :(得分:1)

就是这样,如果你没有初始化你的数组,C ++不能保证它是空白的