目录
一.函数的概念
函数我们大家都学过,数学中我们常见到函数的概念,比如一次函数y=kx+b我们就称y是x的函数。
在C语言中我们也有函数,有时我们也将其称作子程序。可以看出,函数就是一个完成某项特定的任务的一小段代码。
二.函数的分类
1.库函数
C语言的国际标准ANSI C规定了一些常用的函数的标准,被称为标准库,不同的编译厂商根据C语言标准给出了一系列函数的实现,我们将这些函数称为库函数。
下面提供几个库函数学习的网站
C/C++官方链接:C 标准库头文件 - cppreference.com
cplusplus:cplusplus.com - The C++ Resources Network
2.自定义函数
库函数并不能包含所有的函数,更多时候我们需要自定义函数从而实现特定的功能。
函数的语法形式
ret_type fun_name(形式参数)
{
}
ret_type是函数的返回类型,用来表示函数计算结果的类型
fun_name是函数名,便于调用
例如:写一个函数实现加减乘除功能
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}
int main()
{
int ret1 = add(5, 3);
int ret2 = sub(5, 3);
int ret3 = mul(5, 3);
int ret4 = div(5, 3);
printf("%d %d %d %d", ret1,ret2,ret3,ret4);
return 0;
}
三.函数的参数
1.实际参数
实际参数(实参)就是真实传递给函数的参数
2.形式参数
形式参数(形参)为函数括号内的x和y,只是形式上存在的,不会真实存在。形式参数调用完后便自动销毁,只在函数中有效。
3.二者关系
形参是实参的一份临时拷贝,他们是各自独立的内存空间。
四.函数的嵌套调用与链式访问
1.嵌套调用
嵌套调用,也可以视为函数之间的相互调用
例如我们现在要设计一个函数来判断某年某月有多少天
代码如下:
int is_leap_year(int y)//用于判断是否为闰年
{
if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
return 1;
else
return 0;
}
int get_days_of_month(int y,int m)//计算该月的天数
{
int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
// 0 1 2 3 4 5 6 7 8 9 10 11 12 让数组下标与月的天数对应上
int day = days[m];
if (is_leap_year(y) && m == 2)//如果是闰年,2月的天数需要在此基础上加1天
day += 1;
return day;
}
int main()
{
int y = 0;
int m = 0;
scanf("%d %d", &y, &m);
int d = get_days_of_month(y, m);
printf("%d\n", d);
return 0;
}
这里反应的函数调用如下:
main函数调用scanf,printf,get_days_of_month
get_days_of_month函数调用is_leap_year函数
需要注意的是,函数之间可以嵌套调用,但函数不能嵌套定义。
2.链式访问
链式访问就是将一个函数的返回值作为另外一个函数的参数。
int main()
{
printf("%d\n", strlen("abcdefg"));
return 0;
}
五.函数的声明和定义
函数在调用时,我们最好做到先声明后调用,否则编译器会因为没有找到声明的函数而出现警告。
如果是多个文件的话,我们一般把函数的声明、类型的声明放在头文件中,函数的实现放在源文件中。
言尽于此,本次对于函数的部分总结就到此结束了,本次是对函数的一个粗略总结,后续应该还会细细完善,谢谢大家观看,如有不足欢迎大家指出,你们的批评是我进步的动力。