Parcourir un tableau C
J'ai un tableau de structures que j'ai créé quelque part dans mon programme.
Plus tard, je tiens à parcourir, mais je n'ai pas la taille du tableau.
Comment puis-je faire une itération sur les éléments? Ou ai-je besoin pour stocker la taille quelque part?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez stocker la taille quelque part, ou vous pouvez avoir une structure avec une valeur spéciale que vous utilisez comme une sentinelle, de la même façon que '\0' indique la fin d'une chaîne.
NULL
est unique sentinelle.Si la taille de la matrice est connue au moment de la compilation, vous pouvez utiliser la taille de la structure afin de déterminer le nombre d'éléments.
Si elle n'est pas connue au moment de la compilation, vous aurez besoin de stocker une taille quelque part ou de créer un terminateur de valeur à la fin du tableau.
sizeof(fooarr[0])
ousizeof(*fooarr)
quesizeof(struct foo)
Il dépend. Si c'est un tableau alloué dynamiquement, qui est, vous l'avez créé l'appel de malloc, alors que d'autres suggèrent, vous devez soit mettre à la taille du tableau/nombre d'éléments quelque part ou ont une sentinelle (un struct avec une valeur spéciale, qui sera la dernière).
Si c'est un tableau statique, vous pouvez sizeof c'est la taille/la taille d'un élément. Par exemple:
Noter que, sauf si c'est global, cela ne fonctionne que dans le cadre où vous avez initialisé le tableau, parce que si vous avez passé à une autre fonction, il devient pourri à un pointeur.
Espère que cela aide.
int (*a)[10] = malloc(sizeof *a)
et l'utilisationsizeof *a / sizeof **a
à "déterminer" le nombre d'éléments plus tard. Pas besoin de stocker la taille séparément.sizeof(array)/sizeof(array[0])
de sorte qu'il fonctionne encore si le sous-jacent de type matrice de changements; ce formulaire vous permet également de facilement définir une macro, par exemple#define ARRAY_COUNT(a) (sizeof(a)/(sizeof(a[0]))
.Je pense que vous devriez stocker la taille de quelque part.
Null-terminated-chaîne type de modèle pour la détermination de la longueur du tableau est une mauvaise idée. Par exemple, l'obtention de la taille de la matrice O(N) alors qu'il pourrait très facilement O(1) sinon.
Ayant cela dit, une bonne solution peut être glib de Tableaux, ils ont l'avantage d'étendre automatiquement si vous avez besoin d'ajouter plus d'éléments.
P. S. pour être complètement honnête, je n'ai pas utilisé beaucoup de désinvolture, mais je pense que c'est une (très) bonne réputation de la bibliothèque.