C – изменить все значения массива структур в одной строке

Я могу объявить структуру:

typedef struct { int var1; int var2; int var3; } test_t; 

Затем создайте массив структур этих структур со значениями по умолчанию:

 test_t theTest[2] = { {1,2,3}, {4,5,6} }; 

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

В C99 вы можете назначить каждую структуру в одной строке. Я не думаю, что вы можете назначить массив структур в одной строке.

C99 представляет сложные литералы. См. Статью доктора Доббса здесь: Новые литералы C: Compound

 theTest[0] = (test_t){7,8,9}; theTest[1] = (test_t){10,11,12}; 

Вы можете назначить указатель следующим образом:

 test_t* p; p = (test_t [2]){ {7,8,9}, {10,11,12} }; 

Вы также можете использовать memcpy:

 memcpy(theTest, (test_t [2]){ {7,8,9}, {10,11,12} }, sizeof(test_t [2]); 

Выше проверено с помощью gcc -std = c99 (версия 4.2.4) на linux.

Вы должны прочитать статью доктора Доббса, чтобы понять, как работают сложные литералы.

Если вы хотите установить значения в ноль (или -1), вы можете использовать memset :

 memset(struct_array, 0, sizeof(struct_array)); memset(struct_array, -1, sizeof(struct_array)); 

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

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

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