C 语言的 “函数” 就像一个 “工具黑箱”—— 你给它输入数据(参数),它帮你完成特定任务(比如计算、判断),最后给你一个 “结果”,这个 “结果” 就是返回值。
举个生活例子:你让计算器(函数)算 “3+5”(参数),计算器显示 “8”(结果),这个 “8” 就相当于 C 语言函数的返回值。
从代码角度看,返回值是函数执行完毕后,通过return语句传递给调用者的 “具体数据”,目的是让调用者能使用函数的处理结果。
根据函数是否返回数据,C 语言函数分为 “有返回值函数” 和 “无返回值函数”,这是理解返回值的关键:
1. 有返回值函数:函数会 “主动汇报结果”
“有返回值” 的意思是:函数执行完后,会通过return语句返回一个具体数据(比如整数、小数、字符),调用者可以把这个数据存起来、打印出来或继续处理。
(1)定义规则:必须声明返回类型
有返回值的函数,定义时必须在函数名前声明 “返回值的类型”(比如int表示返回整数,float表示返回小数),且必须用return语句返回对应类型的数据。
例子:计算两数之和的函数(返回整数)
c
运行
// 声明返回类型为int(整数),表示函数会返回一个整数
int add(int a, int b) {
int result = a + b;
return result; // 返回计算结果(有返回值)
}
int main() {
// 调用add函数,接收返回值并存储到sum中
int sum = add(3, 5); // sum的值就是add返回的8
printf("3+5的结果是:%d\n", sum); // 输出:3+5的结果是:8
return 0;
}
(2)常见场景:需要 “获取结果” 的函数
比如计算(求和、求积)、判断(是否为偶数)、查找(数组中的最大值)等,都需要返回值传递结果:
c
运行
// 判断一个数是否为偶数(返回1表示是,0表示否)
int is_even(int num) {
if (num % 2 == 0) {
return 1; // 是偶数,返回1
} else {
return 0; // 不是偶数,返回0
}
}
2. 无返回值函数:函数只 “做事不汇报结果”
“无返回值” 的意思是:函数只执行操作(比如打印、修改数据),不返回任何数据,调用者无需(也无法)接收结果。
(1)定义规则:用void声明,可省略return
无返回值的函数,定义时必须用void(表示 “空类型”)声明返回类型,且return语句可写可不写(如果写,不能带数据,只能写return;)。
例子:打印问候语的函数(只做事,不返回结果)
c
运行
// 声明返回类型为void,表式无返回值
void print_greeting() {
printf("Hello, C语言!\n"); // 只执行打印操作
// 可以省略return,函数执行完自动结束
}
int main() {
print_greeting(); // 调用函数,直接执行打印,无需接收结果
return 0;
}
(2)常见场景:只需要 “执行动作” 的函数
比如打印信息、初始化数据、交换变量值等,这些操作不需要返回结果,用无返回值函数更合适:
c
运行
// 交换两个整数的值(通过指针修改原变量,无需返回值)
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
return是实现 “返回值传递” 的核心语句,它的作用有两个:
传递返回值:把函数的处理结果传给调用者(仅用于有返回值的函数);
结束函数:让函数立刻停止执行,不管后面还有多少代码。
例子:return的双重作用
c
运行
int find_max(int a, int b) {
if (a > b) {
return a; // 返回a,同时结束函数(下面的代码不执行)
}
return b; // 返回b,结束函数
}
注意:
有返回值的函数,return后必须跟一个与 “返回类型” 匹配的数据(比如int函数返回整数);
无返回值的函数(void),return后不能跟数据(只能写return;),甚至可以省略。
1. “C 语言中返回值是 0 是什么意思?”
最常见于main函数(程序入口函数),main函数的返回值是int类型,返回 0 表示 “程序正常结束”,非 0 值(比如 1、-1)表示 “程序异常结束”(比如遇到错误)。
这是 C 语言的约定,操作系统会通过main的返回值判断程序是否正常运行:
c
运行
int main() {
// 程序正常执行完所有代码
return 0; // 告诉操作系统:我正常结束啦!
}
2. “有返回值和没有返回值是什么意思?”
有返回值:函数会 “输出结果”,调用者可以用这个结果做后续操作(比如计算、判断);
没有返回值:函数只 “执行动作”,不输出结果,调用者只需让它 “做事” 即可。
简单说:有返回值是 “函数给你一个答案”,无返回值是 “函数帮你做一件事”。
3. “返回值被忽略是什么意思?”
这是编译器的警告(不是错误),意思是 “你调用了有返回值的函数,但没使用它的返回值”。
比如调用add(3,5)却不用变量接收结果:
c
运行
int add(int a, int b) { return a + b; }
int main() {
add(3, 5); // 调用add并返回8,但没使用这个值
// 编译器会警告:“返回值被忽略”
return 0;
}
解决方法:要么用变量接收返回值(int sum = add(3,5);),要么如果确实不需要结果,可忽略警告(不影响程序运行)。
4. “有参返回值是什么意思?”
“有参” 指函数有参数(输入数据),“返回值” 指函数有输出结果,合起来是 “既需要输入数据,又会输出结果的函数”,这是 C 语言中最常见的函数类型:
c
运行
// 有参数(a,b),有返回值(a*b的结果)
int multiply(int a, int b) { // 有参
return a * b; // 有返回值
}
五、避坑指南:新手常犯的返回值错误
返回类型与return数据不匹配错误:声明返回int,却返回小数
c
运行
int get_num() {
return 3.14; // 错误:返回类型是int,数据是float
}
void函数返回数据错误:void函数用return带数据
c
运行
void print() {
return 5; // 错误:void函数不能返回数据
}
有返回值函数忘记return错误:int函数没写return,会返回随机值
c
运行
int sub(int a, int b) {
int res = a - b;
// 忘记写return res; 会返回垃圾值
}