C – Cambia tutti i valori di una matrice di strutture in una riga

Posso dichiarare una struttura:

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

Quindi creare una matrice di quelle strutture struttura con valori predefiniti:

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

Ma dopo aver creato l’array, c’è un modo per cambiare i valori nello stesso modo in cui ho fatto sopra, usando solo una riga, specificando esplicitamente ogni valore senza un loop?

In C99 puoi assegnare ciascuna struttura in una singola riga. Non penso che sia ansible assegnare la matrice di strutture in una sola riga.

C99 introduce i letterali composti. Vedi l’articolo del Dr. Dobbs qui: The New C: Compound Literals

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

Potresti assegnare a un puntatore come questo:

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

Puoi anche usare memcpy:

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

Sopra testato con gcc -std = c99 (versione 4.2.4) su linux.

Dovresti leggere l’articolo del Dr. Dobbs per capire come funzionano i letterali composti.

Nel caso in cui si desidera impostare i valori a zero (o -1), è ansible utilizzare memset :

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

penso di no, puoi solo avviare gli array in questo modo. ma puoi cambiare i valori delle strutture usando il metodo ‘one-line’

Se le variabili vengono copiate da un’altra fonte, puoi usare un metodo come memcpy per sovrascrivere direttamente i valori della struct.

Tuttavia, la lingua non fornisce un modo diretto per impostare semplicemente i valori, oltre all’impostazione di singoli elementi.