函数的主要内容: 函数的概念,设计,实现(定义) 变量的作用域和生存期 递归函数 1,函数的概念: function,功能模块 在C语言中,函数是完成某个特定功能的指令序列的封装。 (1)函数可以实现代码复用 (2)函数有利于实现模块化设计 (3)函数可以灵活的组合调用 "函数就是实现某个功能的指令序列" 函数的设计: 需求分析: 你得知道完成什么事情 然后完成这个事情需要什么资源:数据,内存开销等等 具体的功能实现 ==> 算法 反馈一个结果 函数的实现(定义) 返回类型 函数名(输入参数列表) { 语句(指令序列) } "返回类型":函数返回值的类型,即return语句后面那个表达式的值的类型, 一般是"单值"类型",即基本类型或指针类型。 返回也可以没有返回值,即void类型,如果不指定返回类型,默认为int型。 "函数名":C语言标识符,把该名字与函数关联起来。 "输入参数列表":功能模块的输入。格式如下: 参数类型1 参数名1,参数类型2 参数名2,... 函数也可以没有参数,即void。 注意: 函数是不能嵌套定义的,即函数的定义必须在函数外面。 函数的调用: 主调函数:调用其他函数的函数 被调函数:被别人调用的函数 "实际参数":在函数调用过程中,主调函数传递给被调函数的输入参数值。简称为"实参"。 "形式参数":被调函数在定义时的参数。简称为"形参"。 ★函数的调用过程: (1)把实参的值赋值给相应的形参 (2)然后运行函数主体中的语句 (3)函数调用结束后,函数表达式的值就是return后面表达式的值(也可以没有返回值) return 有两个作用 (1)结束函数。 (2)返回一个值 数据的传递: 主 => 被调函数 : 参数 被 => 主调函数 : 返回值 主 <=>主调函数 : 全局变量 2,变量的作用域与生存期 作用域: 变量名能代表该内存空间的范围 全局变量: 在函数外面的,且定义在最前面的变量叫全局变量。 全局变量的作用域:自定义处到文件结束(别的文件也能调用,但需要用extern声明) 但是,如果一个全局变量有static修饰,那么这个全局变量的作用域就仅在本文件中。 局部变量: 在函数体内或复合语句内定义的变量,叫局部变量 局部变量的作用域:自定义处起到函数或复合语句结束(即到第一个右花括号结束) ★不同作用域的两个变量,必是两个独立的空间。即使同名,则就近往上找。 ★形参不能改变实参(形不改实):当主调函数调用被调函数且实际参数是变量时, 则被调函数里形参变量的值的改变不会影响到实际参数。 原因:形参只是被调函数里的局部变量,与实参变量是两个独立的存储单元,只是 形参变量的值被赋值为实参变量的值而已,两者互不影响。 生存期: 生存周期,过了生存期,其内存空间就会被释放掉。 全局变量的生存期,随进程持续性:你的程序一运行(进程),全局变量就会一直存在, 直到你的进程退出。 局部变量的生存期: (1)普通局部变量 普通局部变量的生存期,是随定义它的函数或复合语句持续性。(到最近的右花括号) (2)static 局部变量 static int a; static 局部变量的生存期,随进程持续性,且其定义时的初始化只执行一次。 3,递归 递归函数,是指函数调用过程中,直接或间接调用了自身。 C语言递归函数设计步骤: (1)问题的模型本身要符合递归模型 (2)先明确函数要实现的功能与参数之间的关系,暂不管功能的实现 (3)问题的解,当递归到一定层次时,答案是显而易见的,且能结束函数 (4)呈现第n层与n-1层之间的递归关系