c++中未初始化数组时出现奇怪的数字

Strange numbers when array is not initialized in C++

本文关键字:数字 初始化 数组 c++      更新时间:2023-10-16

EDIT: ^^^ "duplicate"根本没有提到数组
编辑2:等等,那是用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的幂有关?)数字?我认为这可能与内存分配有关但我只是初学者,还没有接触到这些

如果你有声明

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

有两种情况:

  1. 当声明为全局(文件作用域)变量时,整个数组将在程序开始之前初始化为零。

  2. 当声明为局部(函数作用域)变量时,数组没有初始化,并且将包含不可预测的数字。

未初始化的数组被垃圾值填充。垃圾值是在用户请求该特定内存位置之前存在的值。内存位置一直存在。在许多情况下,由于编译器在返回这些位置之前显式地写入默认值,因此输出为0。但是C/c++编译器并不总是表现出这种行为,因此出现了不同的输出。

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