函数(二):参数传递

<基于 C++ Primer P187>
1.传值参数
(1)函数对形参的所有操作都不会影响实参。
(2)指针形参可以通过形参改变实参所指对象的值,但实参本身并没有改变。
C中常常使用指针类型的形参访问函数外部的对象,但在C++中建议使用引用类型的形参代替指针。
2.传引用参数
(1)引用形参是它对应的实参的别名。
(2)使用引用可以避免拷贝,尤其是类类型对象较大或不支持拷贝操作时。
(3)如果函数无须改变引用形参的值,最好将其声明为常量引用。
(4)使用引用形参可以返回额外信息。
3.const 形参与实参
(1)形参的顶层 const 被忽略(作用于对象本身)。
(2)指针或引用形参与 const:
可以使用非常量初始化一个底层 const 对象(作用于所指对象),但反之不行。
(3)尽量使用常量引用:
一是避免误导调用者,二是避免限制函数所能接受的实参范围。
4.数组形参
(1)由于不允许拷贝数组,因此不能以值传递的形式使用数组参数。,但可以把形参写成类似数组的形式。
(2)由于数组会被转换成指针,因此为函数传递一个数组时,实际上传递的是指向数组手元素的指针。
(3)管理指针形参的三种常用技术:
①使用标记指定数组长度。
适用于有明显结束标记且该标记不会于普通数据混淆的情况,如 C 风格字符串。
②使用标准库规范。
传递指向数组首元素和尾后元素的指针。
③传递一个表示数组大小的形参。
(4)只有当函数确实要改变元素值的时候才将形参定义成指向非常量的指针。
(5)数组引用形参,但只能传递固定大小的数组。(后续可以改为任意)
(6)传递多维数组,本质上传递的是一个指向数组的之后,后面所有维度的大小都是数组类型的一部分。
5.main:处理命令行选项
第一个形参 argc 表示数组中字符串的数量,第二个形参 argv 是一个数组,元素是指向 C 风格字符串的指针。
当使用 argv 中的实参时,一定要记得可选的实参从 argv[1] 开始;argv[0] 保存程序的名字,而非用户输入。
6.含有可变形参的函数
有时无法提前预知应该向函数传递几个实参,为了编写能够处理不同数量实参的函数,有三种方法:
(1)若所有实参类型相同,传递 initializer_list 标准库类型形参。
(2)若实参类型不同,编写可变参数模版。
(3)若只用于与 C 函数交互的接口程序,可以使用省略符形参类型。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值