c++中未初始化数组时出现奇怪的数字
Strange numbers when array is not initialized in C++
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 */
有两种情况:
当声明为全局(文件作用域)变量时,整个数组将在程序开始之前初始化为零。
当声明为局部(函数作用域)变量时,数组没有初始化,并且将包含不可预测的数字。
未初始化的数组被垃圾值填充。垃圾值是在用户请求该特定内存位置之前存在的值。内存位置一直存在。在许多情况下,由于编译器在返回这些位置之前显式地写入默认值,因此输出为0。但是C/c++编译器并不总是表现出这种行为,因此出现了不同的输出。
就是这样,如果你不初始化你的数组,c++不能保证它是空的
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 使用从1到N的数字初始化std数组模板参数
- 使用数字初始化常量引用
- 成员初始化列表中初始化的向量与传递给构造函数的数字不同
- 设置::使用数字中的引号进行向量初始化
- 初始化具有递增数字的编译时常量大小的数组
- 如何初始化字符串以包含C 中所需数量的数字数量
- 如何使用整数值中的数字符号初始化字符数组
- 添加大数字C++-初始化程序失败
- 使用一系列数字有效地初始化 std::set
- 初始化成员函数字段
- Array[n]vs Array[10]-使用变量与数字文本初始化数组
- 大数字类,初始化
- c++中未初始化数组时出现奇怪的数字