Инициализация 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
цикл или что-то подобное, чтобы перебирать строки, а не столбцы, или использовать массив инициализаторов массива из одного элемента.
Я подозреваю, что вы, возможно, захотите взглянуть на некоторые матричные библиотеки, которые облегчают обработку математических структур.