为什么我的双数组没有初始化为 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>>
来强调数据的二维性质,但这可能不太方便。
我正在创建一个二维数组。但是,当我使用双 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>>
来强调数据的二维性质,但这可能不太方便。