Hvordan bestemmer jeg størrelsen af mit array i C?
Det vil sige, hvor mange elementer arrayet kan indeholde?
Resumé:
int a[17];
size_t n = sizeof(a)/sizeof(a[0]);
Fuldt svar:
For at bestemme størrelsen af dit array i bytes kan du bruge sizeof
.
operatoren:
int a[17];
size_t n = sizeof(a);
På min computer er ints 4 bytes lange, så n er 68.
For at bestemme antallet af elementer i arrayet kan vi dividere arrayets samlede størrelse med størrelsen af arrayelementet. Du kan gøre dette med typen, som her:
int a[17];
size_t n = sizeof(a) / sizeof(int);
og få det korrekte svar (68 / 4 = 17), men hvis typen af
a
ændrede sig, ville du få en ubehagelig fejl, hvis du glemte at ændre
sizeof(int)
også.
Så den foretrukne divisor er sizeof(a[0])
, størrelsen af
nulte element i arrayet.
int a[17];
size_t n = sizeof(a) / sizeof(a[0]);
En anden fordel er, at du nu nemt kan parametrisere array-navnet i en makro og få:
#define NELEMS(x) (sizeof(x) / sizeof((x)[0]))
int a[17];
size_t n = NELEMS(a);
Det er værd at bemærke, at sizeof
ikke hjælper, når der er tale om en array-værdi, der er henfaldet til en pointer: selvom den peger på starten af et array, er den for compileren det samme som en pointer til et enkelt element i arrayet. En pointer husker ikke "noget andet om det array, der blev brugt til at 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));