C - изменить все значения массива структур в одну строку - PullRequest
3 голосов
/ 03 августа 2009

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

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

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

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

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

Ответы [ 4 ]

8 голосов
/ 03 августа 2009

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

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

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.

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

2 голосов
/ 03 августа 2009

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

memset(struct_array, 0, sizeof(struct_array));
memset(struct_array, -1, sizeof(struct_array));
0 голосов
/ 03 августа 2009

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

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

0 голосов
/ 03 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...