![97f6d6842342ae55f1e463e070fe025c.png](https://i-blog.csdnimg.cn/blog_migrate/7111bd5d22725d938f15a9e67812d839.jpeg)
C语言:函数
函数的定义与使用
函数:完成特定任务的独立程序代码单元
优势
省去编写重复代码 方便后期修改完善 提高代码的可读性
函数定义
void sum (int begin,int end)
void——函数头,指函数返回类型。(void表示函数没有返回类型) sum——函数名称 (int begin,int end)——参数
![0ce4517a6239fd425661c6d85365f12b.png](https://i-blog.csdnimg.cn/blog_migrate/de045c1cfe22f2db38483a6e8983c333.jpeg)
调用函数
函数名(参数值) ( )起到了表示函数调用的重要作用 即使没有参数也需要括号 ·如果有参数,则需要给出正确的数量和顺序
这些值会被按照顺序依次用来初始化函数中的参数 如果函数有参数,调用函数时必须传递给它数量、类型正确的值 可以传递给函数的值是表达式的结果这包括: * 字面量
- 变量
- 函数的返回值
- 结算的结果
函数先后关系
C的编译器自上而下顺序分析你的代码 所以要先声明/定义出函数,再调用函数
函数声明
提前告诉编译器你下面将要定义的函数类型 同时会在下面检查声明与定义的函数类型是否相符 (不会检查参数名称,所以在声明中可以不写参数名称只写类型,不过通常会写,方便阅读)
在没有参数时
void f()
void f(void)
前者在传统C中,它表示函数的参数表未知,并不表示没有参数 注意:如果参数有类型,在声明时一定要写上,如果没有参数,也要写成后者形式
函数原型
函数头,以分号“;结尾,构成了函数的原型 用逗号分割的列表指明参数的数量和类型。
函数的参数与变量
传值 (参数的转移)
每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系
过去,对于函数参数表中的参数,叫做形式参数” 调用函数时给的值,叫做实际参数 (形式参数属于本地/局部变量,为该函数私有)
本地变量
函数的每次运行,就产生了一个独立的变量空间,在这个空间中的变量,是函数的这次运行所独有的,称作本地变量(局部变量/自动变量)
定义在函数内部的变量就是本地变量
参数也是本地变量
变量的生存期和作用域
生存期:
什么时候这个变量开始出现了,到什么时候它消亡了
作用域:
在(代码的)什么范围内可以访问这个变量(这个变量可以起作用)
对于本地变量,这两个问题的答案是统一的:大括号内——块
本地变量的规则
本地变量是定义在块内的
- 它可以是定义在函数的块内
- 也可以定义在语句的块内
- 甚至可以随便拉一对大括号来定义变量
程序运行进入这个块之前, 其中的变量不存在,离开这个块,其中的变量就消失了
块外面定义的变量在里面仍然有效 块里面定义了和外面同名的变量则掩盖了外面的(但不能在块内定义一个与外面同名的变量)
- 本地变量不会被默认初始化
- 参数在进入函数的时候被初始化了
细节
- C语言不允许函数嵌套定义
- int main()也是一个函数,可以写成 int main(void)
- return(0)返回0可表示该程序正常运行