Come posso determinare la dimensione del mio array in C?
Cioè, il numero di elementi che l'array può contenere?
Sommario esecutivo:
int a[17];
size_t n = sizeof(a)/sizeof(a[0]);
Risposta completa:
Per determinare la dimensione del tuo array in byte, puoi usare l'operatore `sizeof operatore:
int a[17];
size_t n = sizeof(a);
Sul mio computer, gli int sono lunghi 4 byte, quindi n è 68.
Per determinare il numero di elementi nell'array, possiamo dividere la dimensione totale dell'array per la dimensione dell'elemento dell'array. Potreste farlo con il tipo, in questo modo:
int a[17];
size_t n = sizeof(a) / sizeof(int);
e ottenere la risposta corretta (68 / 4 = 17), ma se il tipo di
a
cambiasse avreste un brutto bug se dimenticaste di cambiare
anche la sizeof(int)
.
Quindi il divisore preferito è sizeof(a[0])
, la dimensione del
elemento zero dell'array.
int a[17];
size_t n = sizeof(a) / sizeof(a[0]);
Un altro vantaggio è che ora si può facilmente parametrizzare il nome dell'array in una macro e ottenere:
#define NELEMS(x) (sizeof(x) / sizeof((x)[0]))
int a[17];
size_t n = NELEMS(a);
Vale la pena notare che sizeof
non aiuta quando si ha a che fare con un valore di array che è decaduto in un puntatore: anche se punta all'inizio di un array, per il compilatore è lo stesso di un puntatore a un singolo elemento di quell'array. Un puntatore non "ricorda" nient'altro dell'array che è stato usato per inizializzarlo.
int a[10];
int* p = a;
assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));