Инициализировать значения массива в структуре

У меня есть структура, в которой есть несколько массивов. Массивы имеют тип unsigned char [4].

Я могу инициализировать каждый элемент, вызывая

struct->array1[0] = (unsigned char) something; ... struct->array1[3] = (unsigned char) something; 

Просто интересно, есть ли способ инициализировать все 4 значения в одной строке.

РЕШЕНИЕ: Мне нужно создать временный массив со всеми инициализированными значениями, а затем вызвать memset (), чтобы скопировать значения в массив структур.

Если значения одинаковы, вы можете сделать что-то вроде

 struct->array[0] = struct->array[1] = struct->array[2] = struct->array[3] = (unsigned char) something; 

В противном случае, если значения хранятся в массиве, вы можете использовать функцию memcpy

 memcpy(struct->array, some_array, sizeof(struct->array)); 

Если вы действительно имеете в виду «инициализировать» в том смысле, что вы можете это сделать в то время, когда вы объявляете переменную, тогда обязательно:

 struct x { unsigned char array1[4]; unsigned char array2[4]; }; struct x mystruct = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; 

Когда вы создаете структуру, вы можете инициализировать ее с помощью агрегатной инициализации:

 struct test { int blah; char arr[4]; }; struct test = { 5, { 'a', 'b', 'c', 'd' } }; 

Да:

 struct Foo { unsigned char a[4]; unsigned char b[4]; }; struct Foo x = { { 1, 2, 3, 'a' }, { 'a', 'b', 'c', 0 } }; 

Я вижу, у вас есть указатель (не так ли?).

Если вы выделяете память для указателя с помощью calloc() все внутри структуры будет инициализировано с помощью 0 .

В противном случае вам необходимо установить memset() в 0 или назначить элемент по элементу.

 memset(struct_pointer, 0, sizeof *struct_pointer); 

Вы также можете зацикливать:

  for(i = 0; i < 4; i++) the_struct->array1[i] = (unsigned char) something; 

Это будет работать, даже если у вас нет char, но, например, int (и values! = 0). На самом деле, memsetting, скажем, 1, структура, сделанная из int (когда sizeof int больше 1), не является правильным способом их инициализации.