4.6 本章小结
函数就是具有特殊功能的语句的集合,它是结构化程序设计中的一个子过程、子程序,也是模块化设计思想当中的模块。从撰写者的角度,可以将函数分为库函数和自定义函数。
函数在使用前必须有定义,否则在编译时会产生链接错误。在函数定义时,将小括号内的参数称为形式参数,简称形参。形式参数必须指明数据类型。
函数可以分为函数头和函数体两部分。
函数调用格式为函数名加上小括号,小括号内可以给出参数。函数调用时,小括号内的参数称为实际参数,简称实参。函数被执行时,会将实参的值复制给形参。因此,实参的类型、顺序和数量必须和形参的类型、顺序和数量匹配。
函数声明的方式为函数头加上分号。函数定义包含了函数声明。如果函数定义在函数调用之前,则无须单独的函数声明;若函数定义位于函数调用之后,则必须在函数调用前进行函数声明。
函数按有无返回值,可分为无返回值函数和有返回值函数。
函数按有无参数,可分为无参函数和带参函数。
函数不允许嵌套定义,但允许嵌套调用,即在一个函数中调用另外一个函数。
若函数调用自身,则称为递归调用,拥有递归能力的函数称之为递归函数。递归调用时,必须有终止递归的条件。递归调用的算法思想是将大目标不断分解化小,直至拥有明确结果(条件成立)时,终止递归并进行反推,最终实现目标。
在递归调用时,可以把函数想象成是不同的函数,即把递归调用看成普通的嵌套调用,这样会更容易理解递归的原理。
变量按存储类型的不同,可以分为自动变量和静态变量。自动变量使用“auto”关键字,静态变量使用“static”关键字。函数中的变量默认为自动变量,“auto”关键字可以被省略。
程序所使用的内存空间可以分为代码区、静态区、堆和栈四个部分。自动变量使用栈,而静态变量使用静态区。对于静态区中的变量,如果在定义时没有进行初始化,编译器会对其进行默认初始化(将其值设置为 0)。
自动变量具有函数生命期,即自动变量的生命期从定义时起,至函数结束时止。
静态变量具有程序生命期,即静态变量的生命期从程序启动时起,至程序结束时止。在函数中的静态变量只会在函数第一次被执行时进行初始化的操作。
变量按作用域的不同,分为局部变量和全局变量。局部变量位于函数内,全局变量位于函数外。全局变量存储在静态区,因此,如果在定义时没有进行初始化,编译器会将其初始化为 0。
局部变量的作用域,从定义处起,至函数结束时止。
全局变量的作用域覆盖所有的程序文件。
和函数一样,在使用全局变量前,要有全局变量的声明。全局变量的定义包含对全局变量的声明,即全局变量的定义在使用之前,无须单独的声明;若全局变量的定义和使用位于不同的文件中,或全局变量的定义位置在使用之后,则需要进行全局变量的声明。
可以使用“extern”关键字对全局变量进行声明,格式为:
extern 数据类型 全局变量名;
如无特殊需要,在对全局变量进行声明时不应该对其进行初始化的操作。
可以通过“const”将一个变量修饰为只读变量,只读变量只可被访问,不可被修改。
C 标准库为我们提供了许多功能强大的函数,这些函数都经过了严格的验证和测试,因此在程序代码中多使用库函数,不失为明智之举。
在使用库函数时,需要在文件头通过“#include”包含相应的头文件。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论