如何计算函数数组参数的大小?
考虑下面的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等的更多准备工作,请参阅“完整面试准备课程” 。