Encontrar la longitud de una matriz dentro de una función [duplicado]
En el programa a continuación, la longitud de la matriz ar
es correcta en principal, pero temp
muestra la longitud del puntero al ar
que en mi computadora es 2 (en unidades de sizeof(int)
).
#include <stdio.h>
void temp(int ar[]) // this could also be declared as `int *ar`
{
printf("%d\n", (int) sizeof(ar)/sizeof(int));
}
int main(void)
{
int ar[]={1,2,3};
printf("%d\n", (int) sizeof(ar)/sizeof(int));
temp(ar);
return 0;
}
Quería saber cómo debo definir la función para que la longitud de la matriz se lea correctamente en la función.
No existe una forma "integrada" de determinar la longitud dentro de la función. Independientemente de cómo pase arr
, sizeof(arr)
siempre devolverá el tamaño del puntero. Entonces, la mejor manera es pasar el número de elementos como un argumento separado. Alternativamente, podría tener un valor especial como 0
o -1
que indique el final (como si estuviera \0
en cadenas, que son solo char []
). Pero entonces, por supuesto, el tamaño de la matriz "lógica" erasizeof(arr)/sizeof(int) - 1
Como otros han dicho, la solución obvia es pasar la longitud de la matriz como parámetro, también puede almacenar este valor al comienzo de la matriz.
#include <stdio.h>
void temp(int *ar)
{
printf("%d\n", ar[-1]);
}
int main(void)
{
int ar[]= {0, 1, 2, 3};
ar[0] = sizeof(ar) / sizeof(ar[0]) - 1;
printf("%d\n", ar[0]);
temp(ar + 1);
return 0;
}