Bases de la programmation en C

int m[3][4];
printf("%td\n", (char *)&m[2][1] - (char *)&m[0][0]);

int fait 4 octets. Quelle est la sortie obtenue en exécutant le code ci-dessus ?

  1. A9
  2. B20
  3. C36
Afficher la réponse et l'explication

Réponse : C. 36

En C, un tableau à deux dimensions est rangé ligne par ligne (row-major) : m[3][4] est disposé dans l'ordre m[0][0] à m[0][3], m[1][0] à m[1][3], puis m[2][0] à m[2][3]. Avant m[2][1], il y a les 2 × 4 = 8 éléments des deux premières lignes et 1 élément de la même ligne, soit 9 éléments au total. Chaque élément fait 4 octets : la distance depuis le début est de 9 × 4 = 36 octets. La soustraction se fait après conversion en char *, si bien que la différence est exprimée en octets.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation en C

  1. Quelle est la sortie obtenue en exécutant le code ci-dessus, qui porte sur un tableau de char contenant une chaîne ?
  2. Après les déclarations ci-dessus, on écrit l'une des instructions A « p = t; », B « *p = 'x'; », C « q = t; » ou D « *q = 'x'; ». Quelle combinaison indique celles qui provoquent une erreur de compilation ?
  3. Quelle est la sortie obtenue en exécutant le programme ci-dessus, qui utilise un tableau de pointeurs de fonction ?
  4. fill et use sont des fonctions définies ailleurs. Quel est le problème de la fonction ci-dessus ?
  5. Quelle affirmation sur le pointeur renvoyé par la fonction make ci-dessus est correcte ?