C++-必知必会_数组形参(条款6)

/**********************************************************************
 *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);
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值