Maison > développement back-end > C++ > Pourquoi « sizeof » renvoie-t-il une taille de tableau incorrecte lors du passage d'un tableau à une fonction C ?

Pourquoi « sizeof » renvoie-t-il une taille de tableau incorrecte lors du passage d'un tableau à une fonction C ?

Linda Hamilton
Libérer: 2024-12-14 15:35:16
original
859 Les gens l'ont consulté

Why Does `sizeof` Return an Incorrect Array Size When Passing an Array to a C Function?

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

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]));
    // ...
}
Copier après la connexion

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!

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