Bases de la programmation en C
void f(int a[10]) {
printf("%zu\n", sizeof a);
}
int main(void) {
int b[10] = {0};
printf("%zu ", sizeof b);
f(b);
return 0;
}int fait 4 octets et un pointeur 8 octets. Quelle est la sortie obtenue en exécutant le programme ci-dessus ?
- A10 10
- B40 8
- C40 40
Afficher la réponse et l'explication
Réponse : B. 40 8
Dans main, b est un tableau de 10 int : sizeof b vaut 10 × 4 = 40 octets. Même si le paramètre de la fonction est écrit int a[10], il n'est pas traité comme un tableau mais comme un pointeur sur int (int *a), et f(b) ne transmet que l'adresse du premier élément. sizeof a dans f vaut donc 8, la taille d'un pointeur. L'option -Wall de gcc donne un avertissement pour ce sizeof. Lorsqu'une fonction a besoin du nombre d'éléments d'un tableau, on le lui passe comme argument séparé.
Continuer : 9 autres questions sur Bases de la programmation en C