Lorsqu'il s'agit de tableaux C, il est crucial de comprendre leur comportement lorsqu'ils sont transmis aux fonctions. Cette question met en lumière les différences surprenantes entre les valeurs sizeof() des tableaux dans et en dehors des fonctions.
Problème :
Dans le programme C donné, un point de tableau de la taille 3 est déclarée et sa taille est correctement obtenue en utilisant sizeof(point)/sizeof(point[0]). Cependant, lorsque le même tableau est passé à la fonction test(), sizeof(arr) renvoie une valeur incorrecte de 2.
Raison :
Lorsqu'un tableau est passé à une fonction en C, il se désintègre en un pointeur vers son premier élément. Par conséquent, sizeof() sur le paramètre de fonction mesure la taille du pointeur, pas le tableau lui-même. Cela conduit à un résultat erroné dans la fonction test().
Solution :
Pour résoudre ce problème, la taille du tableau doit être transmise en tant que paramètre distinct à la fonction :
void test(int arr[], size_t elems) {}
Dans la fonction main(), la taille du tableau peut être transmise using :
test(point, sizeof(point) / sizeof(point[0]));
Remarque :
Il est important de noter que le calcul sizeof(point)/sizeof(point[0]) n'est pas applicable aux allocations dynamiques tableaux, qui ne sont pas alloués sur la pile.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!