为什么int ia2 [10]的默认值为0,即使它是在函数内定义的?

时间:2016-02-23 06:25:25

标签: c++ arrays undefined default

我是C ++的新手,正在尝试学习数组的概念。我在C ++入门中看到了下面的代码和声明。

  

与内置类型的变量一样,默认初始化的数组   在函数内定义的内置类型将具有undefined   值。

从这个语句判断,下面的int ia2[10]是在int main(){}函数内定义的,因此不应该有默认值,所有元素都应该是未定义的。但是,当我尝试打印出它们的值时,它们都等于0,这是任何未初始化的int数组的默认值。

为什么会这样?

int main() {
    string sa2[10]; //all elements are empty strings
    int ia2[10]; //all elements are undefined

    for (int i = 0; i < 10; i++){
        cout << "sa2[" << i << "] " << sa2[i] << endl;
        cout << "ia2[" << i << "] " << ia2[i] << endl;
    }
}

输出:

sa2[0] 
ia2[0] 0
sa2[1] 
ia2[1] 0
sa2[2] 
ia2[2] 0
sa2[3] 
ia2[3] 0
sa2[4] 
ia2[4] 0
sa2[5] 
ia2[5] 0
sa2[6] 
ia2[6] 0
sa2[7] 
ia2[7] 0
sa2[8] 
ia2[8] 0
sa2[9] 
ia2[9] 0

1 个答案:

答案 0 :(得分:1)

它不会被迫拥有一些随机值。它未定义将是什么价值,所以它可以是任何东西,包括所有归零。另请注意,读取值是未定义的行为。