C Language Dichiarazione e inizializzazione di un array

Esempio

La sintassi generale per dichiarare un array monodimensionale è

type arrName[size];

dove type può essere un tipo built-in o tipi definiti dall'utente come le strutture, arrName è un identificatore definito dall'utente e la size è una costante intera.

La dichiarazione di una matrice (una matrice di 10 variabili int in questo caso) è fatta in questo modo:

int array[10];

ora contiene valori indeterminati. Per assicurarti che mantenga valori zero durante la dichiarazione, puoi farlo:

int array[10] = {0};

Le matrici possono anche avere inizializzatori, questo esempio dichiara un array di 10 int 's, dove i primi 3 int conterranno i valori 1 , 2 , 3 , tutti gli altri valori saranno zero:

int array[10] = {1, 2, 3};

Nel suddetto metodo di inizializzazione, il primo valore nell'elenco sarà assegnato al primo membro dell'array, il secondo valore sarà assegnato al secondo membro dell'array e così via. Se la dimensione dell'elenco è inferiore alla dimensione dell'array, come nell'esempio precedente, i membri rimanenti dell'array verranno inizializzati su zeri. Con l'inizializzazione della lista designata (ISO C99), è possibile l'inizializzazione esplicita dei membri dell'array. Per esempio,

int array[5] = {[2] = 5, [1] = 2, [4] = 9}; /* array is {0, 2, 5, 0, 9} */

Nella maggior parte dei casi, il compilatore può dedurre la lunghezza dell'array per te, questo può essere ottenuto lasciando vuote le parentesi quadre:

int array[] = {1, 2, 3}; /* an array of 3 int's */
int array[] = {[3] = 8, [0] = 9}; /* size is 4 */

La dichiarazione di una matrice di lunghezza zero non è consentita.

C99 C11

Array a lunghezza variabile (VLA in breve) sono stati aggiunti in C99 e resi facoltativi in ​​C11. Sono uguali agli array normali, con una differenza importante: la lunghezza non deve essere nota al momento della compilazione. Gli VLA hanno una durata di archiviazione automatica. Solo i riferimenti agli VLA possono avere una durata di archiviazione statica.

size_t m = calc_length(); /* calculate array length at runtime */
int vla[m];               /* create array with calculated length */

Importante:

I VLA sono potenzialmente pericolosi. Se l'array vla nell'esempio sopra richiede più spazio nello stack rispetto a quello disponibile, lo stack andrà in overflow. L'utilizzo di VLA è quindi spesso scoraggiato da guide di stile e da libri ed esercizi.