一.函数的概念
1.函数的定义:
在C语言中函数就是一个完成某项特定任务的一小段代码。
2.函数的作用:
一个大的计算机任务可以分为若干个较小的函数来完成。(同一个函数如果能完成某项特定任务的话,这个函数就可以重复使用,从而提高开发软件的效率)
3.函数的分类:
①库函数:由C语言库直接提供
②自定义函数:由自己创造的函数
二.库函数
标准库和头文件:
库函数的相关信息主要详见于下方链接
🔗http://zh.cppreference.com/w/c/header
三.自定义函数
1.语法形式
①函数的返回类型 函数名 (形式参数)
{
函数体
}
②具体解释:
- 函数的返回类型:void表示什么都不返回。
- 函数体:真正完成运算的过程。
- 函数名:自己起的有意义的名字。
- 形式参数:无参数为void ,有参数需要交代类型名字和参数的个数。
③例子:
#include<stdio.h>
int add(int x,int y)//定义函数并且将形式参数x,y带入函数体参与运算
{
int z=0;//定义变量z并且初始化为0
z=x+y;//将传来的a与b所对应的形式参数x和y相加的值赋值给z
return z;//将计算之后的z值返回给主函数
}
int main ( )
{
int a=0;
int b=0;
scanf("%d %d",&a,&b);//键盘输入a 与b的值,方便之后进行相加运算
int c=add(a,b);//调用add函数,并且将a与b的值传给函数,最后将函数的返回值赋值给c
printf("%d",c);//打印c也就是(a+b)的值
return 0;
}
- 上述例子的add函数也可以写成:
int add(int x,int y)
{
return x+y;//将传来的a b 所对应的形式参数x y相加并且,将相加之后的值直接返回给主函数。
}
- 注意:函数无参数不等于函数无返回值。
四.形式参数和实际参数
1.实际参数:在调用函数时,真实传递给函数的参数(例如上述例子的a和b)
形式参数:在函数定义中,函数名后面的参数(例如上述例子的x 和y)
2.两者关系
形式参数是实际参数的临时拷贝
五.return 语句
1.return之后可以是数值也可以是表达式。如果是表达式则先执行表达式,再返回表达式的结果。例如return x+y;先计算x+y的值然后将其值返回。
2.return后可以什么都没有,这种写法仅适合函数返回类型是void情况。
例子:
void test( )
{
printf("好好学习,天天向上");
if(1)//如果1为真命题,则直接return ,提前结束函数。(前提必须为返回类型是void的情况)
{
return ;
}
printf("haha");
}
int main()
{
test();
return 0;
}
上述代码打印的结果为:好好学习,天天向上(不会打印:haha)
3.return返回值和函数类型不一致,系统会自动把返回的值隐式转换为函数的返回类型。
例子:
int test ( )//函数的返回类型为int [整型]
{
return 3.14;//函数的返回值类型为浮点数类型
}
int main()
{
int r=test( );
pribtf("%d",r);
return 0;
}
上述代码的打印结果为3。
根据上述解释:当函数返回类型和函数返回值的类型不同时,则函数的返回值类型会转换为函数返回类型。
4.return语句执行后,函数就彻底返回,后面的代码不再执行。
5.若函数存在 if等分支语句,则应该在保证每种情况下都有return 返回,否则会出现编译错误。
错误示范:
int test()
{
int a=0;
scanf("%d",&a);//键盘录入的值赋给a
if(a)//如果a为真命题则执行下列语句
return 1;若a为真命题则返回1
}
int main ( )
{
int r=test();
return 0;
}
上述代码没有考虑a为假命题的情况,则会报出此类错误:不是所有的控制路径都有返回值。
6.如果不写函数的返回类型,则默认函数的返回类型为整型。
如果函数必须有返回值,但是没有写返回值,那么函数具体返回什么就不得而知了。
六.数组和函数的应用
1.数组传参数时,实际参数应写成数组名,形式参数应写成数组的形式。
例子:
设置函数时:void test (int arr[10],int sz)
调用函数时:test(arr,sz)
2.实际参数与形式参数的名字可以写成一样的,也可以不一样。
3.函数在设计的时候应该功能单一(函数可以重复使用,提高开发软件的效率)
4.数组在传参时,形式参数的数组和实际参数的数组是同一个(对形式参数的修改也同时会修改实际参数)