C++ Primer学习|函数

把函数看作操作符,形参看作它的操作数。

函数调用的过程也可以看作一次运算,运算的结果就是函数的返回值。函数调用也可以看成一个操作符,它的表示方式是一对圆括号,操作数是函数名和一组实参(可以为空)。函数调用做了两件事情:用对应的实参初始化函数的形参,并将控制权转移给被调用的函数。主调函数的执行被挂起,被调函数开始执行。函数的运行以形参的(隐示)定义和初始化开始。

临时变量与形参、实参:临时变量是在函数体中定义的,形参是在函数的形参表中定义的。它们的作用域都是函数体。实参是一个表达式,用于函数调用时初始化对应的形参值。

函数必须指定返回类型,即使是void。

C++是一种静态强类型语言,这意味着,对于每次函数调用,编译时都会检查其实参类型与对应的形参类型是否相同或可通过隐示转换为该类型。编译器通过函数的形参表进行类型检查。

函数的声明实际上是一种接口。

 


参数传递:形参的初始化与变量的初始化一样,如果形参具有非引用类型,则复制实参的值;如果形参为引用类型,则它只是实参的别名。

非引用形参 表示对应实参的局部副本。对这类形参的修改仅仅改变了局部副本的值。一旦函数执行结束,这些局部变量的值也就没有了。

非引用形参下的几种特殊形参:

(1)指针形参:复制实参指针,对于形参的任何改变仅仅作用与局部副本,不会影响主调函数实参指针的值。但是可通过非const形参指针修改实参指针所指向的对象的值。

如void reset(int *ip)

{

        *ip = 0;//改变了ip指针所指的对象的值

        ip = 0;//只改变ip指针的局部值

}

可以通过把形参定义成指向const对象的指针以保护指针所指向的值。但是,需要注意的是,指针形参是指向const还是非const,影响到函数调用时所使用的参数。可以将指向const对象的指针初始化为指向非const对象,但不可以让指向非const对象的指针指向const对象 (指针的初始化规则)。

(2)const形参:可以简单记忆,对于非引用的const形参和非const形参,实际效果是一样的,都是传递对实参值的复制,因而可以用const对象初始化非const对象,反之亦然。

引用形参

与所有引用一样,引用形参直接关联到其所绑定的对象,而并非这些对象的副本。定义引用时,必须用与该引用绑定的对象初始化该引用。引用形参完全以相同的方式工作。引用形参的名字实际上是某个实参对象的别名。

作用:

(1)通过引用形参让函数修改实参的值。

(2)使用引用形参返回额外的信息。

(3)利用const引用避免复制。大型对象的复制效率太低,某些类类型甚至是无法复制的,使用引用形参,函数可直接访问实参对象,而无须访问它。如果使用引用形参的唯一目的是避免复制实参,则应将形参定义为const引用。应将不需要修改的引用形参定义为const引用 。普通的非const引用形参在使用时不太灵活,既不能用const对象初始化,也不能用字面值或产生右值的表达式实参初始化。

(4)传递指向指针的引用。int *&p的定义从右至左理解,p是一个引用,与指向int型对象的指针相关联。

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值