函数的概念
讲函数之前,先粗略地讲一下什么叫变量:
你打游戏的时候,你的人物被怪打了,血条会减少,血条为0时,人物会死亡,有的游戏支持人物复活。血条就是一个变量,人物的死,和活,也是变量。变量是参与程序流程的量。变量有很多类型,比如整型,也就是整数类型,可以用在人物的血条上;布尔型,只有真和假,可以用在人物的死或活上。等等。
有一天你很想吃饺子(别问为什么,想吃就对了),于是你打算自己做饺子。
当你开始做这件事的那一刻,你就已经进入了主函数,函数名为main。
- 主函数是一个程序的入口,必须有,且只能有一个。
- 主函数的函数体囊括了一个程序的全部流程。即任何一个程序都从主函数开始,在主函数里结束
- 再次强调C语言严格区分大小写,例如如果你写成Main,那就是一个自定义函数了。
你做饺子的过程分为大致分为以下几个步骤:
1、去菜市场买食材,即肉,面粉等。
2、把肉剁碎,和面并擀成饺子皮。
3、包饺子。
4、下锅。
吃了饺子之后,你对自己的手艺很满意,你觉得自己也可以开一家饺子馆(就是这么膨胀),但是你想到将来每天需要做这么多饺子,老方法效率太低,肯定忙不过来。你打算制造一个机器,这个机器的功能如下:
- 机器有三个供料口,分别需要放入肉(整块的就可以)、面粉、水。至于放多少,取决于你需要做多少饺子。
- 食材到了机器里面,机器会将整块的肉切碎,将水和面粉混在一起,和面擀好并切割成一片一片的饺子皮,然后包饺子
- 出料口有一个,包好的饺子就从出料口出来。
本质上,函数是两个集合之间的映射关系,也就是自变量和因变量之间的映射关系。
这台包饺子的机器,就是一个函数,它表示食材和饺子的映射关系。
在数学中,一般将自变量用x表示,映射关系表示为f,因变量表示为y=f(x)。
在编程语言中,自变量叫参数,映射关系就是函数,把函数视为一个整体,那么因变量就叫返回值。
观察下面这个函数:
int temp(int a, int b, char c)
{
//函数体省略
int d = a + b;
return d;
}
函数名称前面int
就是一种数据类型,叫做整型。它限定了返回值(即因变量y)只能是整数。
a, b, c叫做形式参数,简称形参。之所以叫形式参数,是因为它没有具体值,只是一个代号,在你编写函数的时候需要用到它。例如你写一个y=x+1的函数,它代表的是x和y之间的映射关系,而这里的x是个代号,没有具体值。
只有当你调用函数时,才需要给函数传递一个值作用来参与函数体内部的运算,这个实际的值叫做实际参数,简称实参。你将x=5代入函数y=x+1,这个5就是实参。
形参限制了实参的数据类型,例如temp函数第一个参数只能填入整型,第二个也是,第三个只能是字符。就好像放肉的供料口只能肉,放面粉的供料口只能放面粉。但是放多少肉,多少面粉,取决于实参大小。
如果一个函数没有返回值,则在函数名称前用void
取代int
。就好比你有一个垃圾分类机器,你并不关心被处理掉的垃圾去了哪里,那就不需要让它有返回值。
一般我们并不会自己制造一个包饺子的机器,因为很多机器功能强大,结构复杂,制造它远远超出了我们的能力范围,所以大概率上会去买一个。相似的是,很多函数也都不是我们自己写的,C语言的开发人员已经为我们实现了大部分常见的基本功能,这样的函数体对于我们来说是一个“黑箱”,我们不需要知道它内部是如何实现的,而只需要会用就可以了。这并不意味着你不需要对它有任何了解,最起码你需要知道哪个供料口放肉,哪个放水,哪个放面粉等等。我们写的第一个程序中,printf()
就是这样的一个函数。
C语言自带的函数称为库函数(Library Function)。库(Library)是编程中的一个基本概念,可以简单地认为它是一些列函数的集合,在磁盘上往往是一个文件夹。C语言自带的库称为标准库(Standard Library),其他公司或个人开发的库称为第三方库(Third-Party Library)。
函数就是一段可以独立完成某个功能,并且可以重复使用的代码片段,函数的使用可以大大提升开发效率。每一个函数的名称都是独一无二的,函数的格式如下:
返回值类型 函数名(形参1, 形参2,...)
{
//函数体;
}
函数的使用叫做函数调用,调用函数的格式为函数名称(实参1, 实参2,...);
网友评论