编辑:^^^"重复"根本没有提到阵列 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?的数量有关)的数字呢?我认为它可能与内存分配或某些事情有关,但我只是一个初学者而且我还没有进入这个领域。
答案 0 :(得分:3)
如果您有声明
int factors[100]; /* note this is not initialized */
有两种情况:
当声明为全局(文件范围)变量时,整个数组将在程序启动前初始化为零。
当声明为 local (函数范围)变量时,该数组未初始化并包含不可预测的数字。
答案 1 :(得分:2)
未初始化的数组充满了垃圾值。垃圾值是在用户请求之前该特定内存位置中存在的值。内存位置始终存在。在许多情况下,输出为0,因为编译器显式写入defualt值在返回这些位置之前。但C / C ++编译器并不总能表现出这种行为,因此存在各种输出。
答案 2 :(得分:1)
就是这样,如果你没有初始化你的数组,C ++不能保证它是空白的