Инициализировать 2D-массив при объявлении времени на языке программирования C

Как инициализировать 2D-массив с 0s, когда я его объявляю?

double myArray[3][12] = ?

Ответы

Ответ 1

double myArray[3][12] = {0};

или, если вы хотите избежать предупреждения gcc "Отсутствие брекетов вокруг инициализатора" (предупреждение появляется с помощью -Wall или, более конкретно, -Wmissing-braces)

double myArray[3][12] = {{0}};

Ответ 2

Если вы хотите инициализировать нулями, вы делаете следующее:

double myArray[3][12] = { 0 };

Если вы хотите заполнить фактические значения, вы можете вставить скобки:

double myArray[3][3] = { { 0.1, 0.2, 0.3 }, { 1.1, 1.2, 1.3 }, { 2.1, 2.2, 2.3 } };

Ответ 3

pmg правильный, однако обратите внимание, что

double myArray[3][12] = {{}};

даст тот же результат.

Кроме того, имейте в виду, что

double myArray[3][12] = {{some_number}};

будет работать только так, как вы ожидаете, когда some_number равен нулю.

Например, если бы я сказал

double myArray[2][3] = {{3.1}};

массив не будет заполнен 3.1, а будет

3.1  0.0  0.0
0.0  0.0  0.0

(первый элемент является единственным, установленным для указанного значения, остальные установлены равным нулю)

Этот вопрос (с инициализацией обычного массива с одним значением по умолчанию) содержит дополнительную информацию

Ответ 4

Я думаю, что это будет

double myArray[3][12] = {0}

Ответ 5

Вы можете использовать

double myArray[3][12] = { 0 };

или

double myArray[3][12];
memset(myArray, 0, sizeof(double) * 3 * 12);

Ответ 6

@JSB ձոգչ придумал синтаксис для инициализации с фактическими значениями, который идеально соответствует заголовку вопроса, который привел меня сюда (меня интересовал порядок индексов).

myArray[3][2] = { { 0.1, 0.2 }, { 1.1, 1.2 }, { 2.1, 2.2 } };

Первым индексом является индекс строки - самый медленный индекс. Это называется порядок C, а не F (Fortran).

Ответ 7

pmg метод работает лучше всего, поскольку он работает над понятием, что если u инициализирует любой массив частично, остальные из них получают значение по умолчанию, равное нулю. else, u может объявить массив как глобальную переменную, а если не инициализирован, элементы массива будут автоматически установлены на значение по умолчанию (в зависимости от компиляторов).