C++必知必会(六)数组形参
条记:
c++基础不存在所谓的“数组形参”,数组在传入时,实质上只传入指向其首元素的指针 。
void average( int array[12] ); // 形参是一个int *
void average( int array[] ); // 形参仍然是一个int *
void average( int (&array)[12] ); // 此刻函数只能接管巨细为12的整型数组
// 留意:不行以利用int *初始化 int(&)[n]
template< int n >
void average( int (&array)[n]); // 借助模板使代码泛化
void average_n(int array[], int nSize); // 传统做法是把数组巨细明晰传入函数
template< int n >
inline void average( int (&array)[n] ) // 模板与传统做法团结实现
{
average_n(array, n);
}
多维数组的环境,以下声明语句相等,可是数组的第二个界线(以及后续的)没有被退化 :
void process( int array[10][20] ); // 形参是指向数组首元素的指针
void process( int (*array)[20] ); // 形参是指向一个具有20个元素的数组的指针
void process( int array[][20] ); // 形参是指针,可是比前边两个语句越发清晰
同样,操作模板以及传统做法团结,可以实现数组形参输入不需要明晰传入巨细:
void process_2d(int *arr, int n, int m);
template< int n, int m >
inline void process( int (&array)[n] )
{
process_2d(array, n, m);
}