Encontrar la longitud de una matriz dentro de una función [duplicado]

Resuelto makhlaghi asked hace 11 años • 7 respuestas

En el programa a continuación, la longitud de la matriz ares correcta en principal, pero tempmuestra la longitud del puntero al arque 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.

makhlaghi avatar Jul 11 '13 16:07 makhlaghi
Aceptado

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 0o -1que indique el final (como si estuviera \0en cadenas, que son solo char []). Pero entonces, por supuesto, el tamaño de la matriz "lógica" erasizeof(arr)/sizeof(int) - 1

Ingo Leonhardt avatar Jul 11 '2013 09:07 Ingo Leonhardt

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;
}
David Ranieri avatar Jul 11 '2013 10:07 David Ranieri