📜  如何在C++中打印数组参数的大小?

📅  最后修改于: 2021-05-30 10:59:49             🧑  作者: Mango

如何计算函数数组参数的大小?

考虑下面的C++程序:

// A C++ program to show that it is wrong to 
// compute size of an array parameter in a function
#include 
using namespace std;
  
void findSize(int arr[])
{
    cout << sizeof(arr) << endl;
}
  
int main()
{
    int a[10];
    cout << sizeof(a) << " ";
    findSize(a);
    return 0;
}

输出:

40 8

上面的输出是针对整数大小为4个字节且指针大小为8个字节的机器的。

主要版画40内的COUT语句,COUT在findSize打印8的原因是,数组总是传递函数指针,即findSize(INT ARR [])和findSize(INT * ARR)平均完全相同的事情。因此,findSize()中的cout语句将打印指针的大小。有关详细信息,请参见此内容。

如何在函数找到数组的大小?
我们可以传递“对数组的引用”。

// A C++ program to show that we can use reference to
// find size of array
#include 
using namespace std;
  
void findSize(int (&arr)[10])
{
    cout << sizeof(arr) << endl;
}
  
int main()
{
    int a[10];
    cout << sizeof(a) << " ";
    findSize(a);
    return 0;
}

输出:

40 40

上面的程序看起来不好,因为我们已经硬编码了数组参数的大小。我们可以使用C++中的模板来做得更好。

// A C++ program to show that we use template and
// reference to find size of integer array parameter
#include 
using namespace std;
  
template 
void findSize(int (&arr)[n])
{
    cout << sizeof(int) * n << endl;
}
  
int main()
{
    int a[10];
    cout << sizeof(a) << " ";
    findSize(a);
    return 0;
}

输出:

40 40

我们也可以创建一个泛型函数:

// A C++ program to show that we use template and
// reference to find size of any type array parameter
#include 
using namespace std;
  
template 
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;
}

输出:

40 40
80 80

现在,下一步是打印动态分配的数组的大小。这是你的专人!我给你一个提示。

#include 
#include 
using namespace std;
  
int main()
{
    int *arr = (int*)malloc(sizeof(float) * 20);
    return 0;
}
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”