Existe-t-il un raccourci pour la taille / longueur du tableau en C?

Est-il possible d’accélérer l’obtention d’une taille de tableau en C?

Taper out sizeof(array)/sizeof(int) chaque fois devient vieux. Est-ce que des bibliothèques C ont quelque chose comme .length ou est-il possible de définir sizeof(array)/sizeof(int) comme une constante plus courte de quelque sorte (possible aussi en utilisant la notation par points)?

Vous pouvez utiliser sizeof(array)/sizeof(*array) et créer une macro.

 #define length(array) (sizeof(array)/sizeof(*(array))) 

Toutes les solutions en C se résument à une macro:

 #define ARRAY_LENGTH(array) (sizeof((array))/sizeof((array)[0])) 

Vous pouvez toujours simplement écrire une macro pour le faire. Notez que cela ne fonctionnera pas comme une fonction, car il faudrait rétrograder le tableau en un pointeur vers son premier élément. Il ne renverrait donc que sizeof(int *) / sizeof(int) .

 #define INTSIZE(array) (sizeof(array) / (sizeof(int)) 

Ou plus généralement …

 #define SIZE(array, type) (sizeof(array) / (sizeof(type)) 

Wow, les votes négatifs. Bon, ça va aussi marcher:

 #define SIZE(array) (sizeof(array) / (sizeof((array)[0])) 

La réponse courte est non”; en C, il n’existe aucun moyen d’obtenir le nombre d’éléments d’un tableau en se basant uniquement sur l’expression du tableau . L’astuce sizeof est à peu près aussi bonne qu’elle ne l’est, et son utilisation est limitée aux expressions de type tableau. Donc, ce qui suit ne fonctionnera pas:

 char *foo = malloc(1024); size_t count = sizeof foo; 

count reçoit le nombre d’octets pour le type de pointeur (4 sur une architecture de bureau typique), pas dans le bloc alloué.

 char arr[100]; char *p = arr; size_t count = sizeof p; 

Comme ci-dessus.

 void foo(char *arr) { size_t count = sizeof arr; // same as above ... } void bar(void) { char array[100]; foo(array); ... } 

Comme ci-dessus.

Si vous devez savoir combien d’éléments se trouvent dans un tableau, vous devez suivre ces informations séparément.

Le traitement des tableaux par C est à l’origine de nombreuses brûlures d’estomac.