Maison > développement back-end > C++ > Pourquoi `sizeof()` renvoie-t-il une valeur différente pour les tableaux C à l'intérieur et à l'extérieur des fonctions ?

Pourquoi `sizeof()` renvoie-t-il une valeur différente pour les tableaux C à l'intérieur et à l'extérieur des fonctions ?

Barbara Streisand
Libérer: 2024-12-21 16:47:09
original
871 Les gens l'ont consulté

Why Does `sizeof()` Return a Different Value for C Arrays Inside and Outside Functions?

Sizeof() trompeuse de C-Array à l'intérieur d'une fonction

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) {}
Copier après la connexion

Dans la fonction main(), la taille du tableau peut être transmise using :

test(point, sizeof(point) / sizeof(point[0]));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal