C++ Primer学习笔记(7)——指针形参和引用形参的比较

前面讲到了巧用引用形参可以达到很好地目的。还有一种是指针形参,它用的比较少,专用于数组形参。

问:什么时候应使用指针形参?什么时候应使用引用形参?两者的优缺点是什么?

  • 使用的情况

当函数需要处理数组,且函数体不依赖于数组的长度时应使用指针形参,其他情况下用引用形参。

  • 优缺点

指针形参的优点是可以明确表示函数所操纵的是指向数组元素的指针,而不是数组本身,而且可以用任意长度的实参数组来调用函数;缺点是函数体不能依赖于数组的长度,容易造成数组内存的越界访问,从而产生错误的结果或导致程序的崩溃。

void printValues(int*){...}
void printValues(int[]){...}
void printValues(int[10]){...}

上面三种定义是等价的,形参类型都是int*,即使写的是数组,默认转化成了指向数组的指针。

实参可以是任意长度的int 型数组,但是使用过程中可能会越界,不安全。


引用形参的优点是在函数体中以来数组的长度,是安全的;其缺点是限制了可以传递的实参数组,只能使用长度匹配的实参数组来调用函数。

void printValues(int (&arr)[10]){...}

这是引用形参,引用含有10个 int 型元素的数组,实参只能含有10个int 型数据。

PS: &arr 两边的圆括号是必需的!!!因为下标操作符具有更高的优先级:

f(int &arr[10])   //arr是一个数组,该数组含有是个均为int型引用的数据
f(int (&arr)[10]) //arr是一个数组的引用,该数组含有是个int型数据

所以,在用函数处理数组的时候,要多加小心。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值