¿Cómo imprimir el tamaño del parámetro de array en C++?

¿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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *