
本次总结不包含指针。函数的概念数学中的函数有很多如一次函数yaxb。给一个任意的x就能得到与之对应的y。C语言中的函数也被叫做“子程序”。如同被包装好的代码块用来完成特定的任务。目的需要时可以调用不必写重复的代码把复杂简化让代码更易于阅读理解。函数的形式函数的语法形式ret_type fun name(参数列表){//函数的实现}ret_type是函数返回值的类型用来表示经过函数计算后返回计算机的数据类型。fun name是函数名是为了方便函数的使用。参数列表写在括号里表示的是形式函数。如果形式参数为viod明确表示计算机没有返回的参数。有时候并不一定需要返回值就要用viod要按需求使用。{}也是函数体也就是计算机的计算过程。例子如下函数的分类库函数由编译器的厂商实现被预先写好编译组装。https://zh.cppreference.com/w/c/header 这是库函数的相关头文件查看网站忘记时可以点击查看。使用C/C官⽅的链接https://zh.cppreference.com/w/c/header可以从官网中查看使用。自定义的函数更加灵活方便使用也由程序员自己定义。如int Average(int x, int y){return (x y) / 2;}参数部分要交代清楚: 参数的个数每个参数的类型形参的名字。接下来的代码会成为讲解的例子#include stdio.hint Average(int x, int y){int z 0;z (x y) / 2;return z;}int main(){int a 0;int b 0;scanf(“%d %d”, a, b);int r Average(a, b);printf(“%d\n”, r);return 0;}实参也叫做实际参数是真实传递给函数的参数。在上列的代码中也就是Average(a, b)中括号中的a,b。形参有上文可知就是形式参数为Average(int x, int y)中的xy。不会向内存申请空间不会真实存在只有书被调用的时候实参传递给形参的数才会临时开辟空间。形参与实参的关系相互有联系但是两者都有各自独立的内存空间形参是实参的一份临时拷贝。二者名字可以相同但是内存空间所处的位置也不相同。return语句return后边可以是⼀个数值也可以是⼀个表达式如果是表达式则先执⾏表达式再返回表达式的结果。return后边也可以什么都没有直接写 return; 这种写法适合函数返回类型是void的情况。return语句执⾏后函数就彻底返回后边的代码不再执⾏。return返回的值和函数返回类型不⼀致系统会⾃动将返回的值隐式转换为函数的返回类型。如果函数中存在if等分⽀的语句则要保证每种情况下都有return返回否则会出现编译错误。函数的返回类型如果不写编译器会默认函数的返回类型是int。函数写了返回类型但是函数中没有使⽤return返回值那么函数的返回值是未知的。数组做函数函数的形式参数个数要和函数的实参个数匹配函数的实参是数组形参也可以写成数组形式的形参如果是⼀维数组数组⼤⼩可以省略不写实参写数组名形参如果是⼆维数组⾏可以省略但是列不能省略数组传参形参是不会创建新的数组的形参操作的数组和实参的数组是同⼀个数组数组函数和数组之间相差不大对数组有什么疑问的可以回数组基本知识查看。嵌套调用和链式访问嵌套调用指函数之间相互调用。如is_leap_year() 根据年份确定是否是闰年get_days_of_month() 调⽤ is_leap_year() 确定是否是闰年后再根据⽉计算这个⽉的天数如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){if(m 1 || m 12)return -1; //如果输⼊的⽉份⾮法则返回-1int days[] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int day days[m];if (is_leap_year(y) m 2)day 1;return day;}链式访问将一个函数的返回值作为另一个函数的参数。如int main(){printf(“%d\n”, strlen(“abcdef”));//链式访问return 0;}函数的声明如果想要调用的函数在主函数的后方那必须要把函数类型和函数名与括号复制一份放在前面形式参数可以省略。