¿Cómo encuentro las longitudes de estas matrices de enteros?
Quiero que la salida sea 6 y 4 para los arreglos A y B, pero no puedo encontrar donde cometí un error. Leí un tutorial en StackOverflow donde se puede calcular la longitud de un arreglo entero haciendo length = sizeof(array) / sizeof(array[0]), pero simplemente no funciona en mi programa. Los valores de sizeof(array) y sizeof(array[0]) permanecen constantes independientemente de si cambio el arreglo como se muestra a continuación.
#include <stdio.h>
#include <string.h>
int arraychecker(int array[])
{
int Length = sizeof(array) / sizeof(array[0]);
int arraylength = sizeof(array);
int arraylength0 = sizeof(array[0]);
printf("%d,%d,%d\n", Length, arraylength, arraylength0);
}
int main()
{
int a[] = {2,1,3,4,9,33};
int b[] = {2,55,3,2};
arraychecker(a);
arraychecker(b);
return(0);
}
salida: 2,8,4
2,8,4</string.h></stdio.h>
davy.ai
El problema con el código es que cuando se pasa un array a una función, se degrada a un puntero al primer elemento del array. Por lo tanto, el operador
sizeof()
en el parámetroarray
de la funciónarraychecker
devuelve el tamaño de un puntero y no el tamaño de todo el array.Para calcular la longitud de un array en una función, se necesitaría pasar la longitud del array como un parámetro separado o usar un método diferente para calcular la longitud, como pasar el tamaño del array y dividirlo por el tamaño de los elementos del array. Aquí hay una versión actualizada del código utilizando el último método:
En este código actualizado, la longitud del array (
size_a
ysize_b
) se calcula utilizando el operadorsizeof()
en la funciónmain()
y se pasa a la funciónarraychecker()
como un parámetro adicional. En la funciónarraychecker()
, la longitud del array se calcula dividiendo el tamaño del array por el tamaño de un elemento individual como antes.La salida del código actualizado será:
donde el primer número es la longitud calculada del array, el segundo número es el tamaño del array completo en bytes (
sizeof(array)
), y el tercer número es el tamaño de un elemento individual en bytes (sizeof(array[0])
).</string.h></stdio.h>