在生活中我们会合理利用各种工具来辅助我们实现我们想做的事,我们想写一篇文章,便会用到笔这个工具;程序中的函数也有着类似的作用,我们想要打印一串数据的时候便可以用到printf函数这个“工具”
模块化程序设计与函数
在处理一个复杂项目的时候,例如模拟高考志愿的录取系统,我们会将这个项目分解成
- 学生信息统计
- 学生成绩统计
- 学生志愿顺序统计
- …
等多个小项目,而这些小项目又可以被分成更小的项目;这种将大型项目逐级分解成小块的小型项目逐一实现再整合成一个集体的思想便与函数的设计思路相仿;用函数实现一个个小项目,再通过main函数整合成一个完整的项目便是如此。
库函数
c语言中给我们提供了大量已经定义好的函数提供给我们使用,在编译器中使用这些函数只需要用 #include 预处理指令调用函数所在的库即可;例如printf函数在stdio.h库中,想要使用printf函数便需要调用stdio.h库。
// 使用printf需要调用stdio.h库
#include <stdio.h>
int main()
{
printf("我好帅");
}
自定义函数
除了c语言自带的库函数,我们也可以通过自定义函数来设计有特定功能的函数。
函数的定义
函数返回值的类型 函数名(形式参数表)
{
函数实现功能的代码;
}
int han_shu_ming(int can_shu1, int can_shu2) //定义函数
{
return can_shu1 * can_shu2; //定义返回值
}
int mian()
{
int i = han_shu_ming(2, 3); //用变量i获取函数的返回值
printf("%d", i); //打印变量i的值
}
函数的定义方式如上所示
- 我们在使用函数的时候可能会需要将函数外的数据传入函数内进行处理运算,而参数便是我们将数据传入函数内的通道;我们在调用函数时传入的参数为实际参数(实参),而定义函数时对应需要传入参数在函数内进行运算的参数为形式参数(形参)。类似于数学函数中的x与y,形参本身并没有意义,只是在函数中模拟实参传入运算的一个代表。
- 形参需要声明类型。
- 函数并不能直接调用函数外的数据,需要将数据作为参数传入才能调用。
- 函数通过参数获取函数外的变量,实际是在函数内创建的临时变量储存外部变量的值后进行处理运算,并不能改变外部变量的值。
- 指针可以改变外部变量的值。
- 函数内的临时变量会在函数运行结束时自动销毁释放内存。
- 将函数比作打印机,我们制作了一个打印机,他能将我们指定的内容打印出来,这便是函数的功能;我们指定了一张图片传入打印机,这便是传入实参;打印机能返回给我们一张图,但我们还需要一张纸(变量)作为接收的容器,才能获取到函数返回给我们的内容。
- 函数用 return 表示返回值。
- viod 类型的函数可以没有返回值。
函数的执行流程
程序在执行的时候并不会执行定义函数中的内容,在主函数执行到调用函数的语句时,程序会跳转到定义函数的位置开始执行函数内的代码;在函数内代码执行完毕后程序重新回到主函数调用代码的那一行开始往下继续执行。