函数组成
2023年12月14日 2023年12月18日
函数
- 具名的, 可调用的计算单元; 命名了的代码块
- 函数完成后,其占用的存储空间也随之被释放掉; 函数终止意味着局部变量的引用将指向不再有效的内存区域
- 命名了的计算单元,对程序的结构化至关重要
组成
由返回类型,函数名,形参列表和函数体组成
其中, 返回类型, 函数名和形参列表又称作函数三要素, 因为这三样描述了函数的接口,说明了调用该函数所需的全部信息
-
返回类型
返回值类型特殊的返回类型void,表示函数不返回任何值
函数的返回类型不能是数组类型或函数类型,可以是函数指针和指向数组的指针
-
函数名
函数名称, 用于函数调用 -
形参列表
指示调用函数时需给出的实参类型由0个或多个形参组成的列表
形参以逗号分割,位于一对圆括号之内
形参不可以同名
每个形参都是含有一个声明符(类型修饰符和标识符)的声明,不止声明符,还需要类型
可以设置未命名的形参,这些形参不会在函数体内被使用,但仍需提供实参匹配
形参列表可以为空但不能省略
为空时, 使用关键字void表示函数没有形参
函数最外层作用域(函数体)中的局部变量和形参的名字不能相同
-
函数体
使用花括号
{}
围起来的语句块;定义了函数所执行的操作当函数被调用的时候执行该语句块
其他
-
return语句
函数结束执行过程完成两项工作:
-
返回return语句中的值, 其类型与函数返回类型相容; 用于初始化调用表达式的结果
-
将控制权从被调函数转移回主调函数
-
-
实参
调用函数时,向函数传递的值或对象, 用于初始化函数的形参实参与形参存在对应关系,但没有规定实参的求值顺序
编译器能以任意可行的顺序对实参求值
实参的类型必须与对应的形参类型匹配,这里允许类型转换
-
函数调用
用实参初始化函数对应的形参将控制权转移给被调用函数
主调函数的执行被暂时中断,被调函数开始执行
实参数量应与形参数量一致,形参一定会被初始化
-
调用运算符
()
跟在函数名之后; 传递给函数的实参放在括号内
通过调用运算符执行函数
和点运算符,箭头运算符的优先级相同,左结合律
函数声明
给出函数三要素
要想调用某函数,在调用点之前必须声明该函数的原型
如果一个函数永远不会被用到,可以只有声明而没有定义
和函数定义相比,没有函数体,接分号
函数声明中可以省略形参的名字
称作函数原型
在头文件中声明,在源文件中定义
含有函数声明的头文件应该被包含到定义函数的源文件
main函数
- 返回类型必须为int
- 在大多数系统中, 其返回值用来指示状态: 0表示成功, 非0值含义由系统定义, 与错误类型相关联
示例
1int fact(int val) 2{ 3 int ret = 1; 4 while (val > 1) 5 ret *= val--; 6 return ret; 7} 8 9int main() 10{ 11 int j = fact(5); 12 // 执行函数的第一步,(隐式地)定义并初始化它的形参:创建名为val的变量,把它初始化为调用时所用的实参5 13}