Différence de taille de tableau lors du passage à une fonction
L'opérateur sizeof() signale une valeur inexacte pour un tableau lorsqu'il est transmis à une fonction. Considérez l'extrait de code suivant :
#include <stdio.h> void test(int arr[]) { int arrSize = (int)(sizeof(arr) / sizeof(arr[0])); printf("%d\n", arrSize); // 2 (incorrect) } int main() { int point[3] = {50, 30, 12}; int arrSize = (int)(sizeof(point) / sizeof(point[0])); printf("%d\n", arrSize); // 3 (correct) test(point); return 0; }
Lorsqu'il est appelé depuis main(), l'opérateur sizeof() rapporte avec précision la taille du tableau, mais dans la fonction test(), il sous-estime la taille d'un élément. . Cette disparité se produit car lorsqu'un tableau est transmis à une fonction en C, il se désintègre en un pointeur référençant le premier élément du tableau. Par conséquent, sizeof(arr) calcule la taille du pointeur plutôt que la taille du tableau sous-jacent.
Pour remédier à ce problème, la taille du tableau doit être explicitement transmise en tant que paramètre distinct à la fonction :
void test(int arr[], size_t elems) { // ... } int main() { int point[3] = {50, 30, 12}; // ... test(point, sizeof(point) / sizeof(point[0])); // ... }
Alternativement, pour les tableaux alloués dynamiquement (non illustrés ici), la fonction standard de la bibliothèque C stdlib.h peut être utilisée pour obtenir avec précision la taille du tableau.
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!