Quelque exemple de code pour démarrer la question:
int i = FOO_COUNT;
while (--i >= 0) {
printf("%s\n", foo[i]);
8 Réponses :
int i = sizeof(foo)/sizeof(foo[0]);
Cela fonctionnerait-il toujours si les pointeurs de caractères de FOO ont pointé sur des chaînes de caractère de taille variable?
Donc, si un élément dépasse 15 caractères, ce chèque échouera? Probablement mieux d'utiliser la sentinelle null alors? Merci encore.
Cela ne manquera pas. taille de [foo [0]) ==> Tailleof (Char *); Le nombre de caractères n'a pas d'importance.
OK, n'était pas sûr de ce que vous parlez de 15 limite de charcuterie dans votre commentaire ci-dessus
La partie limite de chargement du commentaire signifie qu'il s'agissait simplement d'ajouter des caractères supplémentaires pour répondre au minimum de 15 caractères pour commentaires dans le débordement de la pile. Sa réponse comme juste "oui", mais la pile trop-fleuve n'aime pas les commentaires qui courtes.
Notez que i code> ci-dessus est une constante de temps de compilation, vous pouvez donc faire: #define n taille de foo FOO / TIMEDOF FOO [0] code> suivi de Int Data [n ]; code>. Qui est valide même pour C89. De plus, les parenthèses ne sont pas requises si Tailleof code> est utilisé avec une valeur au lieu d'un type.
La première phrase ci-dessus devrait être lue: "... le RHS dans la définition de i code> est une constante de temps de compilation".
Désolé pour la confusion. Merci @brian Campbell pour clarifier ce que je voulais dire.
oui. p>
Taille de (FOO) / Tailleof (Char *) P>
est 5. p>
La façon habituelle de le faire est de mettre fin à la matrice avec NULL et ITERE jusqu'à ce que vous frappiez cela. P>
Oui.
int i = sizeof(foo) / sizeof(char*);
Utilisez une sentinelle à la fin, telle que NULL:
static const char *foo[] = {
"123",
"456",
"789",
"987",
"654",
NULL
};
for (char *it = foo[0]; it != NULL; it++)
{
...
}
size_t i = sizeof foo / sizeof *foo; // or sizeof foo / sizeof foo[0] This divides the total number of bytes in the foo array (sizeof foo) by the number of bytes in a single element (sizeof *foo), giving the number of elements in the array.
Il existe également une autre méthode en C99, surtout si vous souhaitez nommer des index, permettant une localisation d'instance, etc. à l'aide de l'initialiseur nommé, le programme est toujours correct, même si une valeur ENum change . p> ou n'importe où dans le programme avec l'index nommé p> Cette technique peut être utilisée pour simuler des paquets de Ressource. Déclarez un Enum code> et plusieurs matrices de chaîne avec des variantes de langue et utilisez un pointeur dans le reste du programme. Simple et rapide (surtout sur des machines 64 bits lorsque l'adresse d'une constante (chaîne) peut être relativement coûteuse.
EDIT: La taille de FOO / TIMITEF * FOO TECHNIQUE fonctionne toujours avec ceci. P> p>
Pour une application,
Même si c avait essayez code> et attraper code>, je ne vois pas comment ils sont pertinents pour itération sur un tableau.