Почему мой двойной массив не инициализируется значением 0? - PullRequest
0 голосов
/ 19 июня 2020

Я создаю двумерный массив. Однако, когда я использую двойной for-l oop для проверки содержимого моего двумерного массива, он заполняется случайными числами. Я знаю, что могу использовать двойной for-l oop, чтобы вручную заполнить мой двойной массив нулями. Однако меня смущает, почему он не делает этого при инициализации.

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

1 Ответ

3 голосов
/ 19 июня 2020

В C и C ++ переменные типов POD (простые старые данные) и массивы таких типов обычно не инициализируются, если вы не инициализируете их явно. Неинициализированные значения могут быть любыми, даже могут отличаться от одного запуска вашей программы к другому. Вам придется инициализировать их самостоятельно.

Бывают случаи, когда типы POD инициализируются автоматически (например, если arr был глобальным, он был бы инициализирован нулем), но обычно рекомендуется инициализировать типы POD даже в в этих случаях.

Вы можете использовать std::fill() или std::fill_n() для заполнения вашего массива, что позволит вам избежать записи двойного for l oop.

Вместо этого вы может использовать std::vector<int> для хранения вашего двумерного массива. Это гарантированно инициализирует значения в массиве. Вы также можете использовать std::vector<std::vector<int>>, чтобы подчеркнуть двумерный характер ваших данных, но это, вероятно, будет менее удобно.

...