No hay ninguno. Esto se debe a que las matrices decaerán a un puntero al primer elemento cuando pasen a una función.
Debe pasar la longitud usted mismo o usar algo en la matriz para indicar el tamaño.
En primer lugar, la opción "pasar la longitud". Llame a su función con algo como:
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.
Un método centinela utiliza un valor especial al final para indicar no hay más elementos (similar a la \0
al final de una matriz C char
para indicar una cadena) y sería algo como esto:
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);
Otro método que he visto aplicar (en su mayoría para las matrices integrales) es utilizar el primer elemento como una longitud (similar a Rexx las variables madre):
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);
¿Al igual que un valor máximo? –
Suponiendo que te refieres al primero, @Mohit, más o menos. El truco 'sizeof' siempre te dará la longitud de la matriz (suponiendo que no se haya descompuesto en un puntero). La flexibilidad es que no estás limitado a pasar ese valor. Si tiene una matriz de tamaño 1000 pero solo 20 valores útiles, puede pasar 20 como tamaño. – paxdiablo
¿Por qué está pasando una matriz de 'int' a una función que espera una matriz de' char * '? – caf