Comment déterminer la taille de mon tableau en C ?

Comment déterminer la taille de mon tableau en C ?

C'est-à-dire le nombre d'éléments que le tableau peut contenir ?

Solution

Résumé exécutif:

int a[17];
size_t n = sizeof(a)/sizeof(a[0]);

Réponse complète:

Pour déterminer la taille de votre tableau en octets, vous pouvez utiliser l'opérateur sizeof. pour déterminer la taille de votre tableau en octets :

int a[17];
size_t n = sizeof(a);

Sur mon ordinateur, les ints font 4 octets de long, donc n est 68.

Pour déterminer le nombre d'éléments dans le tableau, on peut diviser la taille totale du tableau par la taille de l'élément du tableau. Vous pouvez le faire avec le type, comme ceci :

int a[17];
size_t n = sizeof(a) / sizeof(int);

et obtenir la bonne réponse (68 / 4 = 17), mais si le type de a changeait, vous auriez un méchant bug si vous oubliez de modifier le sizeof(int) aussi.

Donc le diviseur préféré est sizeof(a[0]), la taille de l'élément zéro du tableau. élément zéro du tableau.

int a[17];
size_t n = sizeof(a) / sizeof(a[0]);

Un autre avantage est que vous pouvez maintenant facilement paramétrer le nom du tableau dans une macro et obtenir :

#define NELEMS(x)  (sizeof(x) / sizeof((x)[0]))

int a[17];
size_t n = NELEMS(a);
Commentaires (20)

Il est intéressant de noter que sizeof n'aide pas lorsqu'on a affaire à une valeur de tableau qui s'est dégradée en un pointeur : même s'il pointe vers le début d'un tableau, pour le compilateur c'est la même chose qu'un pointeur vers un seul élément de ce tableau. Un pointeur ne se "souvient" de rien d'autre sur le tableau qui a été utilisé pour l'initialiser.

int a[10];
int* p = a;

assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));
Commentaires (4)
sizeof(array) / sizeof(array[0])
Commentaires (0)