筆記:
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);
}