一、C语言中的函数和数学中的函数
美国人将函数称为“Function”。Function 除了有“函数”的意思,还有“功能”的意思,中国人将 Function 译为“函数”而不是“功能”,是因为C语言中的函数和数学中的函数在使用形式上有些类似,例如:
- C语言中有 length = strlen(str)
- 数学中有 y = f(x)
它们是何其相似,都是通过一定的操作或规则,由一份数据得到另一份数据。
不过从本质上看,将 Function 理解为“功能”或许更恰当,C语言中的函数往往是独立地实现了某项功能。一个程序由多个函数组成,可以理解为「一个程序由多个小的功能叠加而成」。
二、库函数和自定义函数
C语言自带的函数称为库函数(Library Function)。库(Library)是编程中的一个基本概念,可以简单地认为它是一系列函数的集合,在磁盘上往往是一个文件夹。C语言自带的库称为标准库(Standard Library),其他公司或个人开发的库称为第三方库(Third-Party Library)。
三、参数
函数的一个明显特征就是使用时带括号( )
,有必要的话,括号中还要包含数据或变量,称为参数(Parameter)。参数是函数需要处理的数据,例如:
strlen(str1)
用来计算字符串的长度,str1
就是参数。puts("C语言中文网")
用来输出字符串,"C语言中文网"
就是参数。
四、返回值
既然函数可以处理数据,那就有必要将处理结果告诉我们,所以很多函数都有返回值(Return Value)。所谓返回值,就是函数的执行结果。例如:
char str1[] = "C Language";
int len = strlen(str1);
strlen() 的处理结果是字符串 str1 的长度,是一个整数,我们通过 len 变量来接收。
函数返回值有固定的数据类型(int、char、float等),用来接收返回值的变量类型要一致。
五、函数不能嵌套定义
1 #include <stdio.h>
2
3 int sum(){
4 int i, sum=0;
5 for(i=1; i<=100; i++){
6 sum+=i;
7 }
8 return sum;
9 }
10
11 int main(){
12 int a = sum();
13 printf("The sum is %d\n", a);
14 return 0;
15 }
运行结果:
The sum is 5050
函数不能嵌套定义,main 也是一个函数定义,所以要将 sum 放在 main 外面。函数必须先定义后使用,所以 sum 要放在 main 前面。也就是说,不能在一个函数中定义另外一个函数,必须在所有函数之外定义另外一个函数。main() 也是一个函数定义,也不能在 main() 函数内部定义新函数。
注意:main 是函数定义,不是函数调用。当可执行文件加载到内存后,系统从 main 函数开始执行,也就是说,系统会调用我们定义的 main 函数。
请看下面这个例子
1 #include <stdio.h>
2
3 void func2(){
4 printf("C语言小白变怪兽");
5 }
6
7 void func1(){
8 printf("http://c.biancheng.net");
9 func2();
10 }
11
12 int main(){
13 func1();
14 return 0;
15 }
func1()、func2()、main() 三个函数是平行的,谁也不能位于谁的内部,要想达到「调用 func1() 时也调用 func2()」的目的,必须将 func2() 定义在 func1() 外面,并在 func1() 内部调用 func2()。