1、为什么需要函数
(1)当程序足够简单时,一个main函数就可以实现所有功能。随着程序功能的增加、复杂化,超出人的大脑的承受范围,这时一个main函数可能就逻辑不清了。这是就需要把一个大程序分成许多小的模块来组织,于是乎出现了概念叫做函数。
(2)函数就是一组一起执行一个任务或功能的语句。举例:就相当于一篇文章要分段一样,一个程序可以分成不同的函数,每个函数执行一个特定的功能。
(3)每个C程序都至少有一个函数,即主函数 main() 。主函数是一种特别的函数,特别之处在于,一个C语言程序必须有一个main函数。C语言规定,一个C语言程序从主函数开始执行,到主函数执行完结束。
(4)C 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。
2、函数的定义
(1)C 语言中的函数定义的一般形式如下:
return_type function_name( parameter list )
{
body of the function // 函数体
}
(2)在 C 语言中,函数由一个函数头和一个函数主体组成。函数的所有组成部分:
- 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
- 函数名称:函数的实际名称。
- 参数:当函数被调用时,所需要的原始数据就是参数。参数包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数,也可能包含多个参数。
- 函数体:函数体包含一组定义函数执行功能的语句。
(3)函数定义决定了的函数的功能,提供了函数的实际主体。
3、函数的声明
(1)函数声明实际上是叫函数原型声明。什么叫原型?函数的原型包含三部分:函数名,返回值类型,函数参数列表。通俗讲,函数原型就是这个函数叫什么,接收什么类型的几个参数,返回一个什么样的返回值。
(2)函数声明的目的是告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。
4、函数的调用
(1)创建 C 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。
(2)函数调用就是使用函数名来调用函数完成功能。调用时必须参照原型给函数传参,然后从函数得到适当的返回值作为结果。
5、库函数
(1)库函数就是别人写好的,可以直接调用的函数。例如C语言的标准库。
(2)在C语言中写代码时可以引用库函数,但是必须使用#include引用这个库函数所在的头文件。
6、函数参数
6.1、形参和实参
(1)形参
- 全称为形式参数。在函数定义和函数声明中的参数,都是形参。
- 形参不是实际存在的变量
(2)实参
- 全称为实际参数,函数调用中,实际传递给函数的变量就是实参。
- 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。
(3)函数调用的过程,其实就是实参传递给形参的一个过程。这个传递实际是一次拷贝。实参本身并没有进入到函数内,而是把自己的值复制了一份传给了函数中的形参,在函数中参与运算。
6.2、传值调用&引用调用
调用类型 | 描述 |
---|---|
传值调用 | 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。 |
引用调用 | 通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。 |