Как инициализировать только несколько элементов массива с некоторыми значениями?
Это может быть глупый вопрос, но возможно ли присвоить значения some для массива вместо всех? Чтобы уточнить, что я хочу:
Если мне нужен массив вроде {1,0,0,0,2,0,0,0,3,0,0,0}
, я могу создать его как:
int array[] = {1,0,0,0,2,0,0,0,3,0,0,0};
Большинство значений этого массива - "0". Можно ли пропустить эти значения и назначать только значения 1, 2 и 3? Я думаю о чем-то вроде:
int array[12] = {0: 1, 4: 2, 8: 3};
Ответы
Ответ 1
Можно ли пропустить эти значения и назначать только значения 1, 2 и 3?
В С, Да. Используйте назначенный инициализатор (добавленный в C99 и не поддерживаемый на С++).
int array[12] = {[0] = 1, [4] = 2, [8] = 3};
Выше инициализатор инициализирует элементы 0
, 4
и 8
массива array
со значениями 1
, 2
и 3
соответственно. Элементы rest будут инициализированы с помощью 0
. Это будет эквивалентно
int array[12] = {1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0};
Лучшая часть состоит в том, что порядок, в котором перечислены элементы, не имеет значения. Можно также написать, например,
int array[12] = {[8] = 3, [0] = 1, [4] = 2};
Но обратите внимание, что выражение внутри [ ]
должно быть целочисленным постоянным выражением.
Ответ 2
Вот мой тривиальный подход:
int array[12] = {0};
array[0] = 1; array[4] = 2; array[8] = 3;
Однако, технически говоря, это не "инициализация" массива:)
Ответ 3
Альтернативный способ сделать это - предоставить значение по умолчанию memset
для всех элементов в массиве, а затем назначить определенные элементы:
int array[12];
memset(array, 0, sizeof(int) * 12); //if the default value is 0, this may not be needed
array[0] = 1; array[4] = 2; array[8] = 3;