Il n'y en a pas. C'est parce que les tableaux se désintègrent en un pointeur vers le premier élément lors du passage à une fonction.
Vous devez soit passer la longueur vous-même ou utiliser quelque chose dans le tableau lui-même pour indiquer la taille.
D'abord, l'option "passer la longueur". Appelez votre fonction avec quelque chose comme:
int setIncludes (char *includes[], size_t count) {
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax."};
setIncludes (arr, sizeof (arr)/sizeof (*arr));
setIncludes (arr, 2); // if you don't want to process them all.
Une méthode sentinelle utilise une valeur spéciale à la fin pour ne pas indiquer plus d'éléments (semblable à \0
à la fin d'un tableau C char
pour indiquer une chaîne) et serait quelque chose comme ceci:
int setIncludes (char *includes[]) {
size_t count = 0;
while (includes[count] != NULL) count++;
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax.", NULL};
setIncludes (arr);
une autre méthode que je l'ai vu utilisé (la plupart du temps pour les tableaux intégrés) est d'utiliser le premier élément comme une longueur (similaire à Rexx variables souches):
int setIncludes (int includes[]) {
// Length is includes[0].
// Only process includes[1] thru includes[includes[0]-1].
}
:
int arr[] = {4,11,22,33,44};
setIncludes (arr);
Donc, comme une valeur maximale? –
En supposant que vous voulez dire le premier, @Mohit, en quelque sorte. L'astuce 'sizeof' vous donnera toujours la longueur du tableau (en supposant qu'il n'ait pas déjà été décomposé en pointeur). La flexibilité est que vous n'êtes pas limité à transmettre cette valeur. Si vous avez un tableau de taille 1000 mais seulement 20 valeurs utiles, vous pouvez passer 20 comme taille. – paxdiablo
Pourquoi transmettez-vous un tableau de 'int' à une fonction qui attend un tableau de' char * '? – caf