六一的部落格


关关难过关关过,前路漫漫亦灿灿。




函数

  1. 具名的, 可调用的计算单元; 命名了的代码块
  2. 函数完成后,其占用的存储空间也随之被释放掉; 函数终止意味着局部变量的引用将指向不再有效的内存区域
  3. 命名了的计算单元,对程序的结构化至关重要

组成

由返回类型,函数名,形参列表和函数体组成

其中, 返回类型, 函数名和形参列表又称作函数三要素, 因为这三样描述了函数的接口,说明了调用该函数所需的全部信息

  1. 返回类型

    返回值类型

    特殊的返回类型void,表示函数不返回任何值

    函数的返回类型不能是数组类型或函数类型,可以是函数指针和指向数组的指针

  2. 函数名

    函数名称, 用于函数调用

  3. 形参列表

    指示调用函数时需给出的实参类型

    由0个或多个形参组成的列表

    形参以逗号分割,位于一对圆括号之内

    形参不可以同名

    每个形参都是含有一个声明符(类型修饰符和标识符)的声明,不止声明符,还需要类型

    可以设置未命名的形参,这些形参不会在函数体内被使用,但仍需提供实参匹配

    形参列表可以为空但不能省略

    为空时, 使用关键字void表示函数没有形参

    函数最外层作用域(函数体)中的局部变量和形参的名字不能相同

  4. 函数体

    使用花括号 {} 围起来的语句块;定义了函数所执行的操作

    当函数被调用的时候执行该语句块


其他

  1. return语句

    函数结束执行过程

    完成两项工作:

    • 返回return语句中的值, 其类型与函数返回类型相容; 用于初始化调用表达式的结果

    • 将控制权从被调函数转移回主调函数

  2. 实参

    调用函数时,向函数传递的值或对象, 用于初始化函数的形参

    实参与形参存在对应关系,但没有规定实参的求值顺序

    编译器能以任意可行的顺序对实参求值

    实参的类型必须与对应的形参类型匹配,这里允许类型转换

  3. 函数调用

    用实参初始化函数对应的形参

    将控制权转移给被调用函数

    主调函数的执行被暂时中断,被调函数开始执行

    实参数量应与形参数量一致,形参一定会被初始化

  4. 调用运算符

    ()

    跟在函数名之后; 传递给函数的实参放在括号内

    通过调用运算符执行函数

    和点运算符,箭头运算符的优先级相同,左结合律


函数声明

给出函数三要素

要想调用某函数,在调用点之前必须声明该函数的原型

如果一个函数永远不会被用到,可以只有声明而没有定义

和函数定义相比,没有函数体,接分号

函数声明中可以省略形参的名字

称作函数原型

在头文件中声明,在源文件中定义

含有函数声明的头文件应该被包含到定义函数的源文件


main函数

  1. 返回类型必须为int
  2. 在大多数系统中, 其返回值用来指示状态: 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}

函数组成



函数

  1. 具名的, 可调用的计算单元; 命名了的代码块
  2. 函数完成后,其占用的存储空间也随之被释放掉; 函数终止意味着局部变量的引用将指向不再有效的内存区域
  3. 命名了的计算单元,对程序的结构化至关重要

组成

由返回类型,函数名,形参列表和函数体组成

其中, 返回类型, 函数名和形参列表又称作函数三要素, 因为这三样描述了函数的接口,说明了调用该函数所需的全部信息

  1. 返回类型

    返回值类型

    特殊的返回类型void,表示函数不返回任何值

    函数的返回类型不能是数组类型或函数类型,可以是函数指针和指向数组的指针

  2. 函数名

    函数名称, 用于函数调用

  3. 形参列表

    指示调用函数时需给出的实参类型

    由0个或多个形参组成的列表

    形参以逗号分割,位于一对圆括号之内

    形参不可以同名

    每个形参都是含有一个声明符(类型修饰符和标识符)的声明,不止声明符,还需要类型

    可以设置未命名的形参,这些形参不会在函数体内被使用,但仍需提供实参匹配

    形参列表可以为空但不能省略

    为空时, 使用关键字void表示函数没有形参

    函数最外层作用域(函数体)中的局部变量和形参的名字不能相同

  4. 函数体

    使用花括号 {} 围起来的语句块;定义了函数所执行的操作

    当函数被调用的时候执行该语句块


其他

  1. return语句

    函数结束执行过程

    完成两项工作:

    • 返回return语句中的值, 其类型与函数返回类型相容; 用于初始化调用表达式的结果

    • 将控制权从被调函数转移回主调函数

  2. 实参

    调用函数时,向函数传递的值或对象, 用于初始化函数的形参

    实参与形参存在对应关系,但没有规定实参的求值顺序

    编译器能以任意可行的顺序对实参求值

    实参的类型必须与对应的形参类型匹配,这里允许类型转换

  3. 函数调用

    用实参初始化函数对应的形参

    将控制权转移给被调用函数

    主调函数的执行被暂时中断,被调函数开始执行

    实参数量应与形参数量一致,形参一定会被初始化

  4. 调用运算符

    ()

    跟在函数名之后; 传递给函数的实参放在括号内

    通过调用运算符执行函数

    和点运算符,箭头运算符的优先级相同,左结合律


函数声明

给出函数三要素

要想调用某函数,在调用点之前必须声明该函数的原型

如果一个函数永远不会被用到,可以只有声明而没有定义

和函数定义相比,没有函数体,接分号

函数声明中可以省略形参的名字

称作函数原型

在头文件中声明,在源文件中定义

含有函数声明的头文件应该被包含到定义函数的源文件


main函数

  1. 返回类型必须为int
  2. 在大多数系统中, 其返回值用来指示状态: 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}