Подтвердить что ты не робот

Как инициализировать только несколько элементов массива с некоторыми значениями?

Это может быть глупый вопрос, но возможно ли присвоить значения 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};
4b9b3361

Ответ 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;