函数概念
C语言中的函数就是,⼀个完成某项特定的任务的一小段代码。
函数分类
库函数
1. 网址:https://zh.cppreference.com/w/c/header
2. 使用库函数时,需要引入包含该库函数的头文件。
自定义函数
语法形式
ret_type fun_name(形式参数) { } //ret_type 是函数返回类型 //fun_name 是函数名 //括号中放的是形式参数 //{}括起来的是函数体
形参和实参
1. 实参的内容是传递给形参的,他们之间是有联系的,但是形参和实参各自是独立的内存空间。
2. 形参是实参的⼀份临时拷贝。
#include <stdio.h> int Add(int x, int y) { int z = 0; z = x+y; return z; } int main() { int a = 0; int b = 0; //输⼊ scanf("%d %d", &a, &b); //调⽤加法函数,完成a和b的相加 //求和的结果放在r中 int r = Add(a, b); //输出 printf("%d\n", r); return 0; } //我们把第17⾏调⽤Add函数时,传递给函数的参数a和b,称为实际参数,简称实参。 //第2⾏定义函数的时候,在函数名add后的括号中写的x和y,称为形式参数,简称形参。
return 语句
1. return后边也可以什么都没有,直接写 return;。(一般和void相匹配)
2. return语句执行后,函数就彻底返回,后边的代码不再执行。
数组做函数参数
1. 函数的形参要和函数的实参个数匹配。
2. 函数的实参是数组,形参也是可写成数组形式的。(本应该是指针)
3. 形参操作的数组和实参的数组是同⼀个数组 。(传递地址)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void set_arr(int arr[4][4], int a, int b); void printf_arr(int arr[4][4], int a, int b); int main() { int arr1[4][4] = { 0 }; set_arr(arr1, 4, 4); printf_arr(arr1, 4, 4); return 0; } void set_arr(int arr[4][4], int a, int b) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { scanf("%d", &arr[i][j]); } } return; } void printf_arr(int arr[4][4], int a, int b) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { printf("%d", arr[i][j]); } } return; }
自定义函数的声明和定义
如果自定义函数出现了先调用再定义时,需要在开头加上函数声明。
int is_leap_year(int y); int get_days_of_month(int y, int m); //把函数定义第一行直接拿来,在最后加上分号。
嵌套调用和链式访问
1. 嵌套调用就是函数之间的互相调用。
2. 所谓链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数,像链条⼀样将函数串起来就是函数的链式访问。
//func.h #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int calculate(int m, int n); int cal_year(int m); //test.c #include "func.h" int main() { int m = 0, n = 0; scanf("%d%d", &m, &n); int a = calculate(m, n); printf("%d", a); return 0; } //func.c int calculate(int m, int n) { int arr1[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int day = arr1[n]; if (cal_year(m)) { day++; } return day; } int cal_year(int m) { if (((m % 4 == 0) && (m % 100 != 0)) || (m % 400 == 0)) return 1; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { printf("%d", strlen("1234567"));//链式访问 return 0; }
分多个文件书写
//.h中存放各种函数声明和其他库函数引用的声明。 //.c中存放主函数和自定义函数的调用。 //.c中主函数要加上 “.h” 的声明。
例如:写一个加法函数。
第一个 test.c 文件中
#include "add.h" int main() { int a = 0, b = 0; scanf("%d%d", &a, &b); int c = add(a, b); printf("%d", c); return 0; } 存放主函数
第二个 add.c 文件中
int add(int a, int b) { return (a + b); } 存放自定义函数
第三个 add.h文件中
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int add(int a, int b); 存放声明和定义
致谢
感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!