/**/ /********************************************************************** *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);