Hvordan bestemmer jeg størrelsen af mit array i C?

Hvordan bestemmer jeg størrelsen af mit array i C?

Det vil sige, hvor mange elementer arrayet kan indeholde?

Løsning

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);
Kommentarer (20)

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));
Kommentarer (4)
sizeof(array) / sizeof(array[0])
Kommentarer (0)