为什么在 C++ 中非初始化数组中有随机数,而在半初始化数组的非初始化成员中没有?
Why there are Random numbers in non initialized array but not in non initialized members of half initialized array in C++?
为什么在示例 1 代码中,它在未初始化的数组项中分配 0,但在示例 2 中,在完全未初始化的数组中分配随机数?为什么它也不为完全未初始化的数组分配 0?
示例 1:
int ar[5] ={0,1};
for (int i =0; i< 5; i++){
cout << ar[i] << " ";
}
// output: 0 1 0 0 0
示例 2:
int ar[5] ;
for (int i =0; i< 5; i++){
cout << ar[i] << " ";
}
// output: 1875998720 0 1875947552 0 1876031856
它们是两个不同的初始化。
情况 2,int ar[5];
执行 default initialization,因为所有元素都被初始化为不确定值。
情况1,int ar[5] ={0,1};
执行aggregate initialization,效果第1和第2个元素初始化为0
和1
,其余元素为value-初始化(零初始化)为 0
.
在第一个示例中!您正在使用默认值初始化大小为 5 的数组。
int arr[5] = {0,1}
花括号中的值将被分配到数组中的相应索引。
例如 0 来自数组的第一个索引,1 来自第二个索引,然后默认 0 值到数组中的其余索引。
第二个例子
您只是声明数组而不是初始化。因此,在数组的每个索引处,都有垃圾值,当您迭代数组时,您会在数组的每个索引处收到未例外的(垃圾)值。
如果您声明了一个变量但没有初始化任何值,它会分配我们无法预测的随机垃圾值。
为什么在示例 1 代码中,它在未初始化的数组项中分配 0,但在示例 2 中,在完全未初始化的数组中分配随机数?为什么它也不为完全未初始化的数组分配 0?
示例 1:
int ar[5] ={0,1};
for (int i =0; i< 5; i++){
cout << ar[i] << " ";
}
// output: 0 1 0 0 0
示例 2:
int ar[5] ;
for (int i =0; i< 5; i++){
cout << ar[i] << " ";
}
// output: 1875998720 0 1875947552 0 1876031856
它们是两个不同的初始化。
情况 2,int ar[5];
执行 default initialization,因为所有元素都被初始化为不确定值。
情况1,int ar[5] ={0,1};
执行aggregate initialization,效果第1和第2个元素初始化为0
和1
,其余元素为value-初始化(零初始化)为 0
.
在第一个示例中!您正在使用默认值初始化大小为 5 的数组。
int arr[5] = {0,1}
花括号中的值将被分配到数组中的相应索引。 例如 0 来自数组的第一个索引,1 来自第二个索引,然后默认 0 值到数组中的其余索引。
第二个例子 您只是声明数组而不是初始化。因此,在数组的每个索引处,都有垃圾值,当您迭代数组时,您会在数组的每个索引处收到未例外的(垃圾)值。
如果您声明了一个变量但没有初始化任何值,它会分配我们无法预测的随机垃圾值。