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.

¿Por qué dice que la longitud del arreglo es 1 en esta función (C++)?

Entonces estoy tratando de hacer una función que obtenga la longitud de una matriz devolviendo el sizeof la matriz y el sizeof el tipo entero…

código:

#include <cstdio>
#include <iostream>

using namespace std;

int len(int *thing) {
    return sizeof(thing) / sizeof(int);
}

int main() {
    int fard[] = {100, 45, 1, 723, 500};
    cout << len(fard);
}

… y cuando ejecuto el código, solo devuelve 1.

¿Cómo puedo solucionarlo / qué hice mal?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que sizeof(thing) devuelve el tamaño del puntero al arreglo de enteros (que es fijo e independiente de la longitud del arreglo), en lugar de devolver el tamaño de todo el arreglo.

    Para solucionar esto, puedes pasar la longitud del arreglo como un parámetro separado a la función len o utilizar una función de plantilla. Aquí tienes un ejemplo utilizando una función de plantilla:

    #include <iostream>
    using namespace std;
    
    template<size_t n="">
    int len(int (&arr)[N]) {
        return N;
    }
    
    int main() {
        int fard[] = {100, 45, 1, 723, 500};
        cout << len(fard);
    }
    

    En el código anterior, len es una función de plantilla que toma una referencia a un arreglo de cualquier tamaño. El parámetro de plantilla N se deduce automáticamente por el compilador en función del tamaño del arreglo pasado a la función. La función simplemente devuelve el tamaño del arreglo, que es igual a N.

    Esto debería darte la longitud correcta del arreglo.

Comments are closed.