一、函数的概念
C语言的程序其实是由无数个小的函数组合而成的,可以说一个大的计算任务可以分解成若干个较小的函数。
C语言中我们一般会见到两类函数:
- 库函数
- 自定义函数
二、库函数
C语言国际标准ANSIC规定了一些常用函数的标准,被称为标准库,这些函数被称为库函数。
库函数文档的一般格式
- 函数原型
- 函数功能介绍
- 参数和返回类型说明
- 代码举例
- 代码输出
- 相关知识链接
三、自定义函数
1.函数的语法形式
ret_type fun_name(形式参数)
{
}
- ret_type是函数返回类型
- fun_name是函数名
- 括号中放的是形式参数
- ret_type是用来表示函数计算结果的类型,有时候返回的是void,表示不返回
- fun_name是为了方便函数
- 函数参数就相当于,工厂中送进去原材料,函数的参数也可以是void,明确表示函数没有参数。如果有参数,要交代清楚参数的类型和名字,以及参数个数。
- {}括起来的部分被称为函数体,函数体就是完成计算的过程。
四、形参和实参
#include"stdio.h"
int add(intx,inty)
{
int z=0;
z=x+y;
return z
}
int main()
{
int a=0;
int b=0;
//输入
scanf("%d",&a,&b);
//调用加法函数,完成a和b的相加
//求和的结果放在r中
int r=add(a,b);
//输出
printf("%d",r);
return 0;
}
1.实参
在上面代码中,2·7行是add函数的定义,有了函数后在第17行调用add函数。
我们把第17行调用add函数时,传递函数的参数a和b,称为实际参数,简称实参。
实际参数就是展示传递给函数的参数。
2.形参
在上面代码中,第二行定义函数的时候,在函数名add后括号写的x和y,称为形式参数,简称形参。
3.实参和形参的关系
我们可以理解为:形参是实参的一份临时拷贝。
五、return语句
- return后面可以是一个数值也可以是一个表达式,如果是表达式则先执行表达式,再返回表达式的结果
- return后面也可以什么都没有,直接写return;这种写法适合函数返回类型是void的情况
- return返回的值和函数返回类型不一致,系统会自动将返回的值隐试转换为函数的返回值
- return语句执行后,函数就彻底返回,后面的代码不再执行
- 如果函数中存在if等分支语句,则要保证每种情况下都有return返回,否则就会出现编译错误
六、数组做函数参数
数组传参的重要知识:
- 函数的形式参数要和函数的实参个数匹配
- 函数的实参是数组,形参也可以写成数组的形式
- 形参如果是一维数组,数组大小可以省略不写
- 形参如果是二维数组,行可以省略,但是列不能省略
- 数组传参,形参是不会创建新的数组的
- 形参操作的数组和实参的数组是同一个数组
例:
七、嵌套调用和链式访问
1.嵌套调用
嵌套调用就是函数之间的互相调用
假设我们要计算某年某月有多少天:
- year( ):根据年份确定是否是闰年
- Day( ):调用year( )确定是否闰年后,再根据月计算这个月的天数
这个函数代码中,main函数中调用了day函数,day函数中调用了year函数从而实现了嵌套。
2.链式访问
链式访问就是将一个函数的返回值作为另外一个函数的参数,像链条一样将函数串起来就是函数的链式访问
上面的代码上第一个printf打印的是第二个printf的返回值,第二个printf打印的是第三个printf的值
第三个printf打印的是43,在屏幕上打印两个字符,再返回2
第二个printf打印的是2,在屏幕上打印一个字符,再返回1
第一个printf打印1
所以屏幕上最终打印的是4321