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