Hvordan bestemmer jeg størrelsen på matrisen min i C?
Det vil si antall elementer matrisen kan inneholde?
Sammendrag: Sammendrag
int a[17];
size_t n = sizeof(a)/sizeof(a[0]);
Fullt svar:
For å bestemme størrelsen på matrisen din i byte, kan du bruke `sizeof``operatoren operatoren:
int a[17];
size_t n = sizeof(a);
På min datamaskin er ints 4 byte lang, så n er 68.
For å bestemme antall elementer i matrisen, kan vi dividere den totale størrelsen på matrisen med størrelsen på matriseelementet. Du kan gjøre dette med typen, slik:
int a[17];
size_t n = sizeof(a) / sizeof(int);
og få det riktige svaret (68 / 4 = 17), men hvis typen til
a
endret du ville ha en stygg feil hvis du glemte å endre
sizeof(int)
også.
Så den foretrukne divisoren er sizeof(a[0])
, størrelsen på den
nullte elementet i matrisen.
int a[17];
size_t n = sizeof(a) / sizeof(a[0]);
En annen fordel er at du nå kan enkelt parametrisere arraynavnet i en makro og få:
#define NELEMS(x) (sizeof(x) / sizeof((x)[0]))
int a[17];
size_t n = NELEMS(a);
Det er verdt å merke seg at sizeof
ikke hjelper når du arbeider med en matriseverdi som har forfalt til en peker: selv om den peker til starten av en matrise, er den for kompilatoren den samme som en peker til et enkelt element i den matrisen. En peker husker ikke noe annet om matrisen som ble brukt til å initialisere den.
int a[10];
int* p = a;
assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));