es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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>

Tags:  , , , ,

Answer

  1. Avatar for 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ámetro array de la función arraychecker 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:

    #include <stdio.h>
    #include <string.h>
    
    int arraychecker(int array[], int size)
    {
        int Length = size / 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};
        int size_a = sizeof(a);
        int size_b = sizeof(b);
    
        arraychecker(a, size_a);
        arraychecker(b, size_b);
    
        return 0;
    }
    

    En este código actualizado, la longitud del array (size_a y size_b) se calcula utilizando el operador sizeof() en la función main() y se pasa a la función arraychecker() como un parámetro adicional. En la función arraychecker(), 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á:

    6,24,4
    4,16,4
    

    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>

Comments are closed.