当前位置:首页 C++ > 正文

C++中数组默认初始化的行为:是将数组的值初始化为0吗?

作者:野牛程序员:2023-03-31 09:29:20 C++阅读 2753

在C++中,如果数组是静态或全局的,或者被声明为static或thread_local,那么未显式初始化的元素将被默认初始化为0。

例如,以下代码定义了一个全局int类型的数组,但是没有为它们提供任何初始值:

#include <iostream>

int myArray[5]; // 每个元素都将被初始化为0

int main() {
    for (int i = 0; i < 5; ++i) {
        std::cout << myArray[i] << std::endl; // 输出0
    }
    return 0;
}

在这个例子中,myArray数组被定义为全局变量,因此未显式初始化的元素将被默认初始化为0。输出结果表明每个元素都被初始化为0。

对于在函数内定义的数组,如果未显式初始化其元素,则其初始值是未定义的(unspecified),而不是0。这是因为未初始化的自动变量(包括数组)在其声明时不会被初始化。访问未初始化的变量值是未定义的行为,因此在使用这些变量之前,应该先显式初始化它们的值。

局部变量:

定义在函数体(包括main函数)内部的未初始化的内置类型变量(即局部变量)的默认初始值是未定义的(也就是一个随机数)。

例如,以下代码定义了一个包含5个int类型元素的数组,但是没有为它们提供任何初始值:

#include <iostream>

int main() {
    int myArray[5]; // 元素的初始值未定义
    for (int i = 0; i < 5; ++i) {
        std::cout << myArray[i] << std::endl; // 输出未定义的值
    }
    return 0;
}

在这个例子中,myArray数组是在函数内定义的自动变量,因此未显式初始化的元素将具有未定义的初始值。输出结果表明每个元素的值都是未定义的。

因此,总结起来,如果数组是静态或全局的,或者被声明为static或thread_local,则未显式初始化的元素将被默认初始化为0。如果数组是在函数内定义的自动变量,则未显式初始化的元素将具有未定义的初始值。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击