目录:
- 函数的概念
- 库函数
- 自定义函数
- 函数定义与声明
- 形参与实参
- return语句
- 数组做函数参数
- 函数的嵌套
1.函数的概念
简单来说,在C语言中函数就是完成某项任务的一段代码,这段代码与main函数类似,但有着自己特殊写法与形式。
C语言函数分类:
1.库函数
2.自定义函数
2.库函数
2.1标准库和头文件
C语言标准中规定了C语言的各种语法规则,并没有提供库函数。但是C语言的国际标准ANSI C提供了一些常用的函数标准,被称为标准库,之后不同的编译器厂商根据C语言国际标准ANSI C提供的一系列函数给出了这些函数的实现。这些函数也就被我妈成为库函数。因此库函数是我们自己给的一个定义,例如:我们经常使用的printf,scanf等还有求次方的pow等。
并且这些库函数根据不同的功能将他们划分在不同的头文件里进行了声明。所以在我们编写代码用到库函数时,也要注意头文件的使用。
库函数的相关头文件(C/C++官方链接):https://zh.cppreference.com/w/header
cplusplus.com:https://legacy.cpiusplus.com/reference/clibary/
3.自定义函数
3.1函数的语法形式
函数就是经过这个函数体,可以得到我的目标值。
- ret_type--->用来表示函数执行后结果的类型,淡然也可以时void,表示什么都不返回
- add_name--->用来表示函数的名字,这个可以自定义,但为了在程序中易懂,会根据这个函数的意义来定义,例如:算求和定义为add等。
- 函数参数----->我要计算的元素的变量,比如我要计算5与6和的大小,那么我函数参数的值就是5和6.
- 函数体要用{}括起来,来完成计算过程。
3.2自定义函数实践
求和函数
int add(int x, int y)
{
return x + y;
}
int main() {
int a, b,sum=0;
scanf("%d %d", &a, &b);
sum=add(a, b);
printf("%d", sum);
return 0;
}
输入两个数就可以进行求和运算。
- int--->函数运行后得到的结果类型,可以是double char float 当然也可以是void
- add--->也就是函数名这是自定义的
- 在main函数中add(a,b)叫做传参,要把scanf输入的值穿给add
- (int x,int y)--->这就是函数参数,用来接收在main函数中传来的值。函数的参数也可以是多种类型,当然也可以是void类型就是什么都没有
- return 用来返回a+b的结果。当然也可以不返回就没有return语句。
- 在main函数中的sum用来接收add函数计算的结果
自定义函数的大体框架也就是以上这样,区别也就在于有无返回类型,返回类型是那种,有无参数,参数类型是那种等等。
4.形参与实参
4.1实参
实参叫做实际参数,也就是我们在main函数中传给add的值。
看图片:在main函数中的add()里的a,b就称之为实参。实参我们可以理解为实际的参数就是我们通过scanf函数输入的值。
4.2形参
这里int add()里的x与y就成为形式参数,简称为形参。它实际用来结束main函数中add传来的a与b的值。
为什么称之为形式参数?:简单来说,如果程序只是在main函数中给add传递值,int add这个函数本身不执行的话,x与y只是形式上的存在就是在你的代码中有x与y这两个参数但实际上,并不会向内存申请空间,也就是讲只有add这个函数真正执行的时候x与y才真正存在,在add运行的时候才存在,运行完后内存又销毁了。只是陪add这个函数走个形式,所以叫形式参数。
4.3形参与实参的关系
通过以上add函数可知形参x与y也就是对应着通过scanf函数输入的a与b的值,所以可以称之为是a与b的拷贝数据。也就是说形参是实参的一份临时拷贝,之所以临时,因为他只有在这个函数运行时才有内存空间才真正存在,所叫实参的临时拷贝。
5.return语句
- return语句后面可以是一个数值,也可以是一个表达式。如果是表达式那就计算完表达式,再返回表达式的值。
- return语句后什么也没有,直接写成return;这中是什么也没有返回,返回类型就是void
- return返回类型与函数类型不一致,最后返回类型会以函数类型为主
- return返回后,函数也就结束了,后面的代码也就不执行
- 如果函数中有if语句等分支语句,则要保证每种情况下都有return返回,否则会编译错误
6.数组做函数参数
6.1类型分为:
- 一维数组
- 二维数组
6.2一维数组
6.2.1数组传参
数组传参传的是数组的地址,如果是整形或者浮点型数组可以把大小传过去,如下列add中的10.
6.2.2数组形参
数组形参可以写成原数组形式如arr[10],也可以如图的形式。
6.3二维数组
6.3.1二维数组的传参
二维数组传参也是传的地址
6.5.1二维数组的形参
二维数组的形参可以写成原数组的形式,也可以省略行,但是列不能省略
7.函数的声明与定义
在编写函数时可以先将函数写出来,在进行编写main函数。
如下图:
如果函数写在main函数之下,要先声明,在进行使用
如下图,标记的地方就是函数声明:
ret_type add_name(形参);这就是声明形式,最终不要忘记后面的;
下图是函数的定义也就是编写函数
如果函数定义写在后面要在前面先对函数进行声明,如果函数定义写在前面,可以不用声明