【问题标题】:Why there are Random numbers in non initialized array but not in non initialized members of half initialized array in C++?为什么在 C++ 中未初始化的数组中有随机数,但在半初始化数组的未初始化成员中没有?
【发布时间】:2021-09-24 05:03:03
【问题描述】:

为什么在示例 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 

【问题讨论】:

    标签: c++ arrays initialization


    【解决方案1】:

    它们是两个不同的初始化。

    案例2,int ar[5]; 执行default initialization,效果是所有元素都被初始化为不确定的值。

    案例1,int ar[5] ={0,1};执行aggregate initialization,效果是第一个和第二个元素被初始化为01,其余元素被值初始化(零初始化)为0 .

    【讨论】:

      【解决方案2】:

      在第一个示例中!您正在使用默认值初始化大小为 5 的数组。

      int arr[5] = {0,1}
      

      花括号中的值将分配给数组中的相应索引。 例如数组的第一个索引处为 0,第二个索引处为 1,然后数组中其余索引处的默认值为 0。

      在第二个例子中 您只是在声明数组而不是初始化。因此,在数组的每个索引处都有垃圾值,当您迭代数组时,您会在数组的每个索引处收到未例外(垃圾)值。

      如果你声明了一个变量但没有用任何值初始化,它会分配我们无法预测的随机垃圾值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-07
        • 2011-05-02
        • 1970-01-01
        • 2023-03-13
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2019-06-18
        相关资源
        最近更新 更多