Vous recherchez des explications sur un sujet spécifique relatif à l'adressage d'un tableau de chaînes. Il semble y avoir plusieurs problèmes connexes, mais je n'ai pas réussi à en trouver un qui ait discuté de ma question. Si cela vous a déjà été demandé, veuillez me diriger vers le fil de discussion correspondant.Accès à un tableau de pointeurs sur des chaînes
Dans l'extrait de code ci-dessous (vérifier l'instruction printf), j'utilise la même variable pour accéder à la valeur d'un emplacement de mémoire et à l'adresse de l'emplacement de mémoire. Je ne sais pas si c'est comme ça que je suis censé écrire ce morceau de code. Y a-t-il une meilleure façon d'indiquer clairement si j'accède à l'adresse ou à la valeur?
char *board[NUM_MAX_ROWS] = {"0101001",
"1101011"};
int main()
{
int i, num_rows=0, num_cols=0;
num_cols = strlen(board[0]);
num_rows = ARR_SIZE(board);
for (i=0; i<num_rows; i++)
printf("%s stored at %p\n", board[i], board[i]);
}
Ma première tentative ressemblait à ce
while(*board != '\0')
{
printf("%s stored ar %p\n", *board, board);
board++;
}
Il est évident que cela ne fonctionne pas :) mais je ne suis toujours pas tout à fait sûr de la façon dont elle est interprétée par le compilateur.
Merci.
Votre premier code est correct. Vous passez un pointeur ('char *') deux fois - l'interprétation de l'argument dépend alors des spécificateurs de format. '% s' imprimera des caractères commençant à l'adresse et s'arrêtant au caractère NUL. '% p' imprimera simplement l'adresse. – jrok
Pourriez-vous expliquer pourquoi le deuxième ne fonctionne pas OBLIGATOIREMENT? – texasbruce
La deuxième pièce n'a pas pu être compilée avec erreur: lvalue requise comme opérande d'incrément (en référence à la carte ++). Je pensais que cela augmenterait un pointeur. – dinesh