1. 背景
函数可以理解为功能的封装,很基础的功能单元,但是因为它虽然看似简单,但是里面涉及了不少知识点和技巧,我们花一篇文章来整理。
2. 函数定义
函数有以下几部分定义:
- 返回类型
- 函数名称
- 形参列表
- 函数体
函数调用的形式是函数名()
,函数调用过程涉及到控制权转移。
函数体其实是一个语句块,语句块会涉及到作用域的问题,在函数方法体内定义的变量都是局部变量,局部变量会在函数执行完后被销毁,所以我们不给函数返回局部变量。
在函数体内定义的static类型对象称为局部静态对象,局部静态对象一旦定义和初始化,会直到程序终止时才会被销毁,最常用的场景是我们统一函数调用次数,可以在函数体内定义一个static局部静态对象,然后每调用一次累加一次。
3. 实参与形参
实参是形参的初始值,实参的类型必须与对应的形参匹配。
函数的形参列表可以为空,也可以有多个值,甚至新版本还为我们提供了可变参数。
只存在于块执行期间的对象称为自动对象,形参就是一种自动对象,在函数开始时为形参申请存储空间,函数终止,形参也会被销毁。实参会初始化形参对应的自动对象。
我们每次调用函数时都会重新创建它的形参,并用传入的实参对形参进行初始化。形参初始化过程和变量初始化一个道理。
实参初始化形参分两种:
- 引用传递
- 值传递(拷贝)
有种情况是形参是指针,当指针拷