¿Cómo obtener la longitud de una matriz en C? ¿Es “sizeof” una solución?

Posible duplicado:
¿Tamaño de una matriz en el lenguaje de progtwigción C?
¿Por qué una C-Array tiene un tamaño de valor () incorrecto cuando se pasa a una función?

Vea el siguiente código y sugiérame cuál es la diferencia de la palabra clave ” sizeof ” cuando uso esto:

#include #include void show(int ar[]); void main() { int arr[]={1,2,3,4,5}; clrscr(); printf("Length: %d\n",sizeof(arr)); printf("Length: %d\n",sizeof(arr)/sizeof(int)); show(arr); getch(); } void show(int ar[]) { printf("Length: %d", sizeof(ar)); printf("Length: %d", sizeof(ar)/sizeof(int)); } 

Pero el resultado es así:

La salida es:

Longitud: 10

Longitud: 5

Longitud: 2

Longitud: 1

por qué me estoy poniendo así; Si quiero tomar la información completa de una matriz a otra, ¿cómo puedo hacerlo?

Sugerirme si alguien sabe.

Las matrices decaen a punteros en llamadas de función. No es posible calcular el tamaño de una matriz que solo se representa como un puntero de alguna manera, incluido el uso de sizeof .

Debe agregar un argumento explícito:

 void show(int *data, size_t count); 

En la llamada, puede usar sizeof para calcular la cantidad de elementos, para matrices reales:

 int arr[] = { 1,2,3,4,5 }; show(arr, sizeof arr / sizeof *arr); 

Tenga en cuenta que sizeof le da el tamaño en unidades de char , por lo que se necesita la división por lo que es esencialmente sizeof (int) , o obtendría un valor demasiado alto.

También tenga en cuenta que, como punto de interés y limpieza, ese sizeof no es una función. Los paréntesis solo son necesarios cuando el argumento es un nombre de tipo, ya que el argumento es una expresión similar al molde (por ejemplo, sizeof (int) ). A menudo puede alejarse sin nombrar los tipos reales, haciendo sizeof en los datos en su lugar.

Esa es la razón por la cual, al escribir una función que toma una matriz, se declaran dos parámetros. uno que es un puntero a la matriz, el otro que define el tamaño de la matriz.

show () toma la dirección de la matriz que está almacenada en 2 bytes. Piense en ello como int * ar.