Инициализация 2D массива столбцов и строк

Если у меня есть массив из 3 строк и 5 столбцов, как это:

int arr[3][5]={0};

Теперь я хочу ввести несколько чисел, поэтому я делаю так:

int arr[3][5] ={10,8,9}

и теперь массив установлен так:

 10  8  9  0  0
  0  0  0  0  0
  0  0  0  0  0

Но я хочу, чтобы на самом деле первые элементы столбца в массиве были установлены следующим образом:

10  0  0  0  0
8   0  0  0  0
9   0  0  0  0

Как я могу поменять местами или изменить порядок массивов, чтобы быть таким?

4 ответа

Решение

Вы хотите это:

int arr[3][5] ={{10},{8},{9}};

Это инициализирует каждый из трех массивов первого измерения, и каждый из них явно инициализирует только первый элемент, в результате чего остальные устанавливаются в 0.

Разбивая вышеуказанную инициализацию, arr является массивом размера 3, где каждый элемент является массивом int размером 5. Итак {10} инициализирует первый из этих 3 элементов массива, {8} инициализирует второй, и {9} инициализирует третий. И поскольку каждый из них инициализирует только первый из 5 элементов каждого подмассива, остальные инициализируются равными 0.

Из раздела 6.7.9 стандарта С:

19 Инициализация должна происходить в порядке списка инициализаторов, каждый инициализатор предоставляется для определенного подобъекта, перекрывая любой ранее перечисленный инициализатор для того же подобъекта; все подобъекты, которые не инициализированы явно, должны быть инициализированы неявно так же, как объекты, которые имеют статическую продолжительность хранения.

Почему бы не написать

int arr[3][5] = { {10, 0, 0, 0, 0},
                  {8, 0, 0, 0, 0},
                  {9, 0, 0, 0, 0 }};

т.е. инициализировать каждый элемент в массиве

Используйте назначенные инициализаторы:

int test[3][5] = { [0][0] = 10 , [1][0] = 8 , [2][0] = 9 } ;

Как я могу поменять местами или изменить порядок массивов, чтобы быть таким?

В С совсем нет. Это не языковая особенность C.

Вы должны использовать for цикл или что-то подобное, чтобы перебирать строки, а не столбцы, или использовать массив инициализаторов массива из одного элемента.

Я подозреваю, что вы, возможно, захотите взглянуть на некоторые матричные библиотеки, которые облегчают обработку математических структур.

Другие вопросы по тегам