¿Cómo calcular el tamaño de un parámetro de array en una función?
Considere el siguiente programa C++:
CPP
// A C++ program to show that it is wrong to // compute size of an array parameter in a function #include <iostream> using namespace std; void findSize(int arr[]) { cout << sizeof(arr) << endl; } int main() { int a[10]; cout << sizeof(a) << " "; findSize(a); return 0; }
Producción:
40 8
El resultado anterior es para una máquina donde el tamaño de un número entero es de 4 bytes y el tamaño de un puntero es de 8 bytes.
La sentencia cout dentro de main imprime 40, y cout en findSize imprime 8. La razón es que las arrays siempre pasan punteros en las funciones, es decir, findSize(int arr[]) y findSize(int *arr) significan exactamente lo mismo. Por lo tanto, la instrucción cout dentro de findSize() imprime el tamaño de un puntero. Vea esto y esto para más detalles.
¿Cómo encontrar el tamaño de una array en función?
Podemos pasar una ‘referencia a la array’.
CPP
// A C++ program to show that we can use reference to // find size of array #include <iostream> using namespace std; void findSize(int (&arr)[10]) { cout << sizeof(arr) << endl; } int main() { int a[10]; cout << sizeof(a) << " "; findSize(a); return 0; }
Producción:
40 40
El programa anterior no se ve bien ya que tenemos un tamaño codificado del parámetro de array. Podemos hacerlo mejor usando plantillas en C++ .
CPP
// A C++ program to show that we use template and // reference to find size of integer array parameter #include <iostream> using namespace std; template <size_t n> void findSize(int (&arr)[n]) { cout << sizeof(int) * n << endl; } int main() { int a[10]; cout << sizeof(a) << " "; findSize(a); return 0; }
Producción:
40 40
También podemos hacer una función genérica:
CPP
// A C++ program to show that we use template and // reference to find size of any type array parameter #include <iostream> using namespace std; template <typename T, size_t n> void findSize(T (&arr)[n]) { cout << sizeof(T) * n << endl; } int main() { int a[10]; cout << sizeof(a) << " "; findSize(a); float f[20]; cout << sizeof(f) << " "; findSize(f); return 0; }
Producción:
40 40 80 80
Ahora, el siguiente paso es imprimir el tamaño de una array asignada dinámicamente. ¡Es tu tarea, hombre! Te estoy dando una pista.
CPP
#include <iostream> #include <cstdlib> using namespace std; int main() { int *arr = (int*)malloc(sizeof(int) * 20); return 0; }
Este artículo es una contribución de Swarupananda Dhua. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA