DAY8\9函数专题重点笔记
- 值传递和址传递
–如果函数有参数,调⽤函数时必须传递给它数量、类型正确的值
– 可以传递给函数的值是表达式的结果,这包括:
- 字⾯量
- 变量
- 函数的返回值
- 计算的结果
- 调⽤函数时给的值与参数的类型不匹配是C语⾔传统上最⼤的漏洞编译器总是悄悄替你把类型转换好,但是这很可能不是你所要的结果
- 指针函数返回值,全局变量的地址、static变量的地址、字符串常量的地址、堆上的地址
- 函数是⼀块代码,接收零个或多个参数,做⼀件事情,并返回零个或⼀个值
- 可以先想像成数学中的函数:y = f(x)
- 函数名(参数值)😭)起到了表⽰函数调⽤的重要作⽤,即使没有参数也需要()如果有参数,则需要给出正确的数量和顺序这些值会被按照顺序依次⽤来初始化函数中的参数
- return停⽌函数的执⾏,并送回⼀个值,⼀个函数⾥可以出现多个return语句
– return;
– return 表达式;- 没有返回值的函数void 函数名(参数表),不能使⽤带值的return;可以没有return调⽤的时候不能做返回值的赋值
- 函数原型,函数先后关系,函数头,以分号“;”结尾,就构成了函数的原型
- 函数原型的⺫的是告诉编译器这个函数⻓什么样
– 名称
– 参数(数量及类型)
– 返回类型- ⼀般写在调⽤它的函数前⾯;原型⾥可以不写参数的名字,但是⼀般仍然写上
指针函数:
类型名 *函数名(函数参数表列);
函数指针:
用函数指针作为指针函数的返回值
递归函数:
一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。
传值:
- 每个函数有⾃⼰的变量空间,参数也位于这个独⽴的空间中,和其他函数没有关系
- 过去,对于函数参数表中的参数,叫做“形式参数”,调⽤函数时给的值,叫做“实际参数”
- 由于容易让初学者误会实际参数就是实际在函数中进⾏计算的参数,误会调⽤函数的时候把变量⽽不是值传进去了,所以我们不建议继续⽤这种古⽼的⽅式来称呼它们
- 我们认为,它们是参数和值的关系
本地变量:
5. 函数的每次运⾏,就产⽣了⼀个独⽴的变量空间,在这个空间中的变量,是函数的这次运⾏所独有的,称作本地变量
6. 定义在函数内部的变量就是本地变量
7. 参数也是本地变量
变量的⽣存期和作⽤域:
8. ⽣存期:什么时候这个变量开始出现了,到什么时候它消亡了
9. 作⽤域:在(代码的)什么范围内可以访问这个变量(这个变量可以起作⽤)
10. 对于本地变量,这两个问题的答案是统⼀的:⼤括号内——块
本地变量的规则:
• 本地变量是定义在块内的
• 它可以是定义在函数的块内
• 也可以定义在语句的块内
• 甚⾄可以随便拉⼀对⼤括号来定义变量
• 程序运⾏进⼊这个块之前,其中的变量不存在,离开这个块,其中的变量
就消失了
• 块外⾯定义的变量在⾥⾯仍然有效
• 块⾥⾯定义了和外⾯同名的变量则掩盖了外⾯的
• 不能在⼀个块内定义同名的变量
• 本地变量不会被默认初始化
• 参数在进⼊函数的时候被初始化了