为什么我的双数组没有初始化为 0?

Why is my double array not initializing to 0?

我正在创建一个二维数组。但是,当我使用双 for 循环检查我的二维数组的内容时,它填充了随机数。我知道我可以使用双 for 循环手动用 0 填充我的双数组。但是,我很困惑为什么它在初始化时不这样做。

int arr[5][5];
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
        cout << arr[i][j]  << " ";
    }
    cout << endl;
}

输出:

0 0 0 0 0 
0 0 0 -272632592 32766 
-272632616 32766 0 1 0 
0 0 0 0 0 
0 0 0 0 -272632608 
Program ended with exit code: 0

在 C 和 C++ 中,POD(普通旧数据)类型的变量和此类类型的数组通常不会被初始化,除非您显式初始化它们。未初始化的值可以是任何东西,甚至可以与程序的一个 运行 不同。你必须自己初始化它们。

有些情况下 POD 类型会自动初始化(例如,如果 arr 是全局的,它将被零初始化)但即使在这些情况下,初始化 POD 类型通常也是一种好习惯。

您可以使用 std::fill()std::fill_n() 来填充数组,这样可以避免编写双 for 循环。

相反,您可以使用 std::vector<int> 来保存二维数组。这保证初始化数组中的值。您也可以考虑 std::vector<std::vector<int>> 来强调数据的二维性质,但这可能不太方便。