Maison >développement back-end >C++ >Comment puis-je obtenir la taille d'un tableau passé comme pointeur en C ?

Comment puis-je obtenir la taille d'un tableau passé comme pointeur en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 03:52:12265parcourir

How Can I Get the Size of an Array Passed as a Pointer in C  ?

Obtenir la taille d'un tableau à partir d'un pointeur en C

En C, déterminer la taille d'un tableau passé en tant que pointeur peut être difficile. Les tableaux présentent une « équivalence tableau/pointeur », où un tableau peut se décomposer en un pointeur lorsqu'il est passé comme argument de fonction. Cela pose le problème de déterminer la taille du tableau avec précision.

Pour pallier ce problème, on ne peut pas s'appuyer sur sizeof() car elle renvoie la taille du pointeur, qui est généralement de 4 ou 8 octets, et non le nombre de éléments du tableau. Au lieu de cela, nous devons explicitement transmettre la taille du tableau comme argument supplémentaire.

Solution :

Modifiez l'en-tête de la fonction pour inclure un paramètre pour la taille du tableau :

int largest(int *list, size_t size)

Passez la taille du tableau avec le pointeur vers le function :

static const size_t ArraySize = 5;
int array[ArraySize];
int result = largest(array, ArraySize);

En transmettant explicitement la taille, la fonction peut déterminer de manière appropriée le nombre d'éléments dans le tableau.

Approche alternative :

Si nous n'avons qu'un pointeur vers le tableau et non la variable du tableau d'origine, nous pouvons calculer la taille en utilisant ce qui suit formule :

size = sizeof(pointer_variable) / sizeof(array_element_type)

Par exemple, si nous avons un pointeur int *ptr vers un tableau d'entiers de taille inconnue, nous pouvons déterminer la taille comme suit :

size = sizeof(ptr) / sizeof(int);

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!

Déclaration:
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