C – Cambiar todos los valores de una matriz de estructuras en una línea

Puedo declarar una estructura:

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

Luego crea una matriz de esas estructuras con valores predeterminados:

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

Pero después de haber creado la matriz, ¿hay alguna forma de cambiar los valores de la misma manera que lo hice anteriormente, usando solo una línea, especificando cada valor explícitamente sin un bucle?

En C99 puede asignar cada estructura en una sola línea. No creo que puedas asignar la matriz de estructuras en una línea.

C99 introduce literales compuestos. Vea el artículo del Dr. Dobbs aquí: The New C: Compound Literals

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

Podría asignar a un puntero como este:

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

También puedes usar memcpy:

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

Probado anteriormente con gcc -std = c99 (versión 4.2.4) en linux.

Debe leer el artículo del Dr. Dobbs para comprender cómo funcionan los literales compuestos.

En caso de que desee establecer los valores en cero (o -1), puede usar memset :

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

Creo que no, solo puedes iniciar matrices de esta manera. pero puede cambiar los valores de las estructuras usando el método ‘de una línea’

Si las variables se están copiando de otra fuente, puede usar un método como memcpy para sobrescribir directamente los valores de estructura.

Sin embargo, el lenguaje no proporciona una forma directa de establecer los valores, aparte de establecer elementos individuales.