¿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?
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: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 plantillaN
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 aN
.Esto debería darte la longitud correcta del arreglo.