无参无返回值
- 语法格式如下:
// 函数定义
void 函数名() {
函数体
}
// 函数调用
函数名();
- 函数名是标识符的一种,需要遵循规则
- 函数只需要定义一次,反复调用
- 只定义函数, 不调用函数, 函数永远不会被执行
- 案例需求:
- 编写一个函数,里面实现2个数字相加,并打印相加后的结果
- 示例代码:
#include <stdio.h>
// 函数定义
void my_add() {
// 实现2个数字相加,并打印相加后的结果
int res = 1 + 2;
printf("res = %d\n", res);
}
int main() {
// 函数调用
my_add();
return 0;
}
- 执行流程
有参无返回值
- 函数参数的作用:增加函数的灵活性
- 可以根据需求在调用函数时, 通过参数传入不同的数据
- 语法格式如下:
// 函数定义
void 函数名(形参列表) {
函数体
}
// 函数调用
函数名(实参列表);
- 实训和形参的关系:从左往右,一一对应
- 案例需求:
- 编写一个函数,实现2个数相加,2个数通过参数传递
- 示例代码:
#include <stdio.h>
// 函数定义
void my_add(int a, int b) {
// 实现2个形参相加,并打印相加后的结果
int res = a + b;
printf("%d + %d = %d\n", a, b, res);
}
int main() {
// 函数调用
my_add(10, 20);
return 0;
}
●执行流程
有参有返回值
返回值基本语法
- 函数返回值的作用:函数外部想使用函数内部的数据
- 语法格式如下:
// 函数定义
返回类型 函数名(形参列表) {
函数体
return 和返回类型一致的数据(或变量);
}
// 函数调用
和返回类型一致的变量 = 函数名(实参列表);
- return是函数的专属关键字,只能用在函数内容
- 案例需求:
- 编写一个函数,实现2个数相加,2个数通过参数传递,返回累加结果给外部使用
- 示例代码:
#include <stdio.h>
// 函数定义
int my_add(int a, int b) {
// 实现2个形参相加,并返回累加的结果
int res = a + b;
return res;
}
int main() {
// 函数调用
int temp = my_add(10, 20);
printf("temp = %d\n", temp);
return 0;
}
- 执行流程
返回值注意点
- return的作用是结束函数
- 函数内,return后面的代码不会执行
- 示例代码
#include <stdio.h>
// 函数定义
void func() {
printf("11111111111111111\n");
return; // 结束函数,函数内后面代码不会执行
printf("222222222222222222\n");
}
int main() {
// 函数调用
func();
return 0;
}
函数的声明
- 如果函数定义代码没有放在函数调用的前面,这时候需要先做函数的声明
- 所谓函数声明,相当于告诉编译器,函数是有定义的,再别的地方定义,以便使编译能正常进行
- 注意:一个函数只能被定义一次,但可以声明多次
#include <stdio.h>
// 函数的声明,分号不能省略
// 函数声明的前面可以加extern关键字,也可以不加
// extern int my_add(int a, int b);
int my_add(int a, int b);
// 另一种方式,形参名可以不写
// int my_add(int, int );
int main() {
// 函数调用
int temp = my_add(10, 20);
printf("temp = %d\n", temp);
return 0;
}
// 函数定义
int my_add(int a, int b) {
// 实现2个形参相加,并返回累加的结果
int res = a + b;
return res;
}
函数案例
- 需求:自定义一个函数,返回2个整数的最大值
- 示例代码:
#include <stdio.h>
// 函数定义
int my_max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
int main() {
// 函数调用
int res = my_max(100, 200);
printf("res = %d\n", res);
return 0;
}