计算单个数组的平均值流程可以扩展到多个数组,但如果仍旧采用一个数组对应一组循环语句,那程序将会很快扩张并变得无趣起来。循环语句可以使同样的事件做N次,函数则提供了同样的流程可以复用的手段。
C语言的设计原则是把函数作为程序的构成模块,使用函数可以省去重复代码的编写,也可以使得程序更加模块化。一个函数是用于完成特定任务的程序代码的自包含单元。它可以执行某些动作,如使用printf进行输出;或返回一个值供程序使用,也可以同时具有以上两种功能。
函数在被使用之前其名称必须是可见的,因此,需要先使用函数声明列出函数。函数声明也可以称为函数原型,其语法如下:
返回类型 函数名( 类型1 参数1名称, 类型2 参数2名称, 更多... );

函数的名称及其参数类型组合在一起,就定义了一个唯一的特性,称为函数签名(不包括返回类型)。同样的函数签名在程序中只允许实现一次。

函数声明只是表明函数的规格:返回什么值,需要哪些类型的参数。声明之后还需要具体的实现,这样函数才是完整的。函数实现是由函数声明去掉分号外加一组用大括号包含的语句组构成,这称为函数体。

函数原型与函数实现的签名必须一致,由函数声明中可以不包含参数名称看到,函数声明时的参数名称与实现时的参数名称可以不一样。只要签名匹配就行。当函数返回类型非void时,必须使用关键字return返回一个返回值,return语句将导致整个函数退出。

当函数返回类型为void时,在函数体内使用return语句将导致函数直接退出,return之后的语句将不再执行。

编写完函数后,我们就可以使用函数了,这被称为调用函数。调用函数时写下函数名称,传递适当的参数即可。经过前面那么多的练习,对于函数调用,想信你已经轻车熟路了吧。

当被调的函数可以返回值时,这个值可以被忽略(如上所见),这也就是为什么返回类型不是函数签名一部分的原因了。由于这个原因,下面这个例子中,函数max的声明是返回int型,但在实现时不小心写成了float,虽然打印结果时使用了%f,但程序仍旧输出了错误的结果。

| 留言与评论(共有 0 条评论) |