/**********************************************************************
*C++必知必会 条款6
*数组形参
*
* C++中其实根本不存在“数组形参”,传入时,实质上只是传入指向其首元素的地址.(例1)
*这种从数组到指针的自动转换被赋予了一个迷人的术语”退化”.同样,一个函数型参数也会
*退化成指针,但和数组会丢失边界不同,退化的函数具有良好的感知力,可保持其”参数类型”
*和”返回类型”.
* 如何希望函数只接收固定数量元素的数组?(例2)
* 由于被传入时数组的边界被忽略,所以最好再多传递一个参数用来表示数组大小.
* 如果实参使用指针,那例2的技巧就无效了.(见例3)
* 多维数组是数组的数组,因此形参是一个指向数组的指针.(见例4)
***********************************************************************/
//例1
void average(int arr[]) //void average(int* arr)
…{…}
int Array[] = …{1,2,3,4};
average(Array);
//例2
void average(int (&arr)[4]) //只接收4个元素的数组,多一个或少一个都不行.
…{…}
int Array[] = …{1,2,3,4}; //4个
average(Array); //right
//int Array[] = {1,2,3}; //3个
//average(Array); //wrong
//例3
void average(int (&arr)[4])
…{…}
int *Array = new int[4]; //对比例2 #22行
average(Array); //wrong
//例4
//void average(int (*arr)[4])
void average(int arr[][4]) //推荐这样写,更清晰
…{…}
int array[2][4] = …{…{1,2,3,4},…{5,6,7,8}};
average(array);
>> 本文固定链接: http://www.vcgood.com/archives/1697