C/C++实践进阶之道:写给程序员看的编程书
上QQ阅读APP看书,第一时间看更新

5-2 函数的基本概念

总结前面,可以发现函数定义的一般形式:

类型标识符函数名([形式参数列表])

{

局部变量定义;

函数调用的一般形式:函数名([实参列表]);

调用一个函数非常简单,如前所见,只要输入正确的参数,一个语句就可以调用一个函数,而这个函数可能具备非常强大的功能。

在使用函数带来的巨大好处的时候,请回顾一下,你是否掌握了以下概念。

1.函数参数:形参和实参

在调用函数时,大多数情况下,主调函数和被调函数之间有数据传递关系。两者的数据传递是通过函数参数完成的。

这个概念也有些像数学中的函数的概念,f(x)中,x是参数,输入不同的x,f(x)的结果也不尽相同。

在C语言中,定义函数时函数名后面括号中的变量名称为“形式参数”/“形参”;在调用函数时,函数名后面的各种表达式称为“实际参数”/“实参”。

2.函数的返回值

在数学中f(x)的结果要传递出来,在C语言中,提供的是差不多相同的机制,可以采用return语句的一个结果,这个结果被称为是函数的返回值。

不过我们要注意以下三点:

(1)C语言中,可以有其他机制返回需要的数据,比如后面要讲的指针,还有C++中开始提供的引用机制。

(2)对于比较专业的程序员来说,return语句一般返回一个非0值或0值,用来表示程序的成功运行或失败,这在很多专业代码中经常见到。

(3)函数执行到return语句肯定结束,但return语句不一定只出现在函数的最后一行。

3.为什么要为被调函数做声明

这是一个和编译相关的语法形式。

什么是被调函数声明?其实就是示例5-3中main()主函数之前的这句int sum(int n);提前声明了一个函数的定义形式。方便编译器的一种技巧。

当被调用函数的定义发生在主调函数之前,即可省掉函数说明。

最好的方法是在文件的开始就为所有被调函数做说明。

实际上,在源代码文件开始的#include语句,往往就是引入其他库函数中的函数调用形式,只有在链接的时候,才会去寻找到具体的实现模块,然后把代码链接进来。