前言:
“函数”这个名词,我们每个人都是耳濡目染。高中数学中的函数已经够让我们头疼了,而现在在C语言中又遇到了“函数”,但这个知识点是我们必须要掌握的,因为函数在C语言中扮演着至关重要的角色,函数不仅是组织和复用代码的有效手段,更是构建复杂程序的基石,下面就让我们一起来挑战挑战C语言中的函数吧。
目录:
一 、 函数的概念二 、库函数1.标准库2.头文件 三、自定义函数四、函数的参数1.实参2.形参3.数组做函数参数4.return 语句 五、函数的嵌套调用和链式访问1.嵌套调用2.链式访问 六、函数的声明和定义
一 、 函数的概念
在C语言中,函数也被称为“子程序”。函数就是一段完成特定任务的代码块,它可以**接收输入的数据(参数),并返回一个值**
。而C语言程序就是由一个个函数组成的。
C语言中常见的两类函数:
1. 库函数;
2. 自定义函数
二 、库函数
1.标准库
C语言国际标准ANSI C规定了一些常用函数的标准,称为标准库。然后编译器厂商根据这些规定的C语言标准给出了一系列函数的实现,这些函数被称为库函数。库函数一定程度上提高了程序员的工作效率,因为它可以直接使用,不用人们去实现一些常见的功能,而浪费时间。
C语言中常用的库函数:
2.头文件
库函数是在标准库中对应的头文件中声明的,所以库函数的使用必须包含头文件
eg:
//#included <stdio.h>//printf;//scanf;
printf , scanf
是我们常用的库函数,#include<stdio.h> 是它们的头文件
库函数相关头文件:https://zh.cppreference.com/w/c/header
包括函数原型,功能介绍,参数,返回值,代码举例…
大家可以去了解看看。
三、自定义函数
库函数只是为了便捷我们的使用,更重要的是自定义函数
。语法如下:
ret_type fun_name(形式参数){}
ret_type: 函数返回类型fun_name: 函数名括号中是形式参数{}中是函数体 eg:加法函数,完成两数相加。函数名:Add,接受两个整形类型的参数,计算的结果也是整形
#include<stdio.h>int Add(int i, int j){return i + j;}int main(){int i = 0;int j = 0;scanf("%d %d", &i, &j);int a = Add(i, j);//调用加法函数printf("%d\n", a);return 0;}
四、函数的参数
函数的参数分为实参和形参
1.实参
根据上面的举例:
这块的 i 和 j 为实际参数(实参就是真实传递给函数的参数)
2.形参
这块的 i 和 j 为形式参数,(如果只是定义了Add函数而不去调用的话,Add函数的参数只是形式上存在,不会向内存申请空间,不真实存在,所以叫形式参数。它只有在函数被调用过程中为了存放实参时才会向内存申请空间,这个过程就是形参的实例化。调用的话就会发现,形参和实参的地址是不一样的,形参是实参的一份临时拷贝。
3.数组做函数参数
数组也可以做函数参数
eg:写一个函数,将一个数组中的内容全部变为6,再写一个函数将其打印出来
#include<stdio.h>void set_arr(int arr[], int sz){int i = 0;for (i = 0; i < sz; i++){arr[i] = 6;}}void printf_arr(int arr[], int sz){int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}}int main(){int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);set_arr(arr,sz);//设置数组内容为6printf_arr(arr,sz);return 0;}
执行结果:
注:
4.return 语句
return 后面可以是一个数值,也可以是一个表达式,返回的是表达式的结果;返回类型是void时,return后面可以什么都不写;return语句执行后,函数返回,后面的代码将不再执行;return返回的值和函数返回的类型不一致时,系统将自动定义为函数的返回类型;函数中如果有if 语句,每种情况下都得有return返回;函数的返回类型如果不写,则默认返回类型是Int;写了返回类型,但没写return返回值,则返回值未知五、函数的嵌套调用和链式访问
1.嵌套调用
嵌套调用就是函数之间的互相调用,下面用一个例子来表达一下吧
eg:计算某年某月有多少天
#include<stdio.h>int is_leap_year(int y)//判断闰年{if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))return 1;elsereturn 0;}int get_days_of_month(int y, int m)//计算某月天数{int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 3 };int day = days[m];if (is_leap_year(y) && m == 2)//调用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;}
执行结果:输入2024年2月
2.链式访问
链式访问就是将一个函数的返回值作为另一个函数的参数
int main(){printf("%d",printf("%d",printf("%d",68)));return 0;}
printf函数返回的是打印在屏幕上的个数,所以最终打印 6821
六、函数的声明和定义
函数的定义就是函数的具体实现
还用上面的代码来举例吧
这个就是函数的定义:
int is_leap_year(int y)//判断闰年{if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))return 1;elsereturn 0;}
函数的声明:
int is_leap_year(int y)
函数的使用必须先声明后使用,其实函数的定义也是一种特殊的声明,所以函数定义放在调用之前也是可以的。
总结:
C语言函数这一章节,是我们想成为编程高手,必掌握的一步,我们通过定义和使用函数,可以构建出结构清晰,功能强大的C语言程序。好了,这一篇就讲到这里了,感觉有收获的话,别忘了留下你的关注和三连哦!