返回与返回值 | Function Return and Return Value
一、引入
在上一节中,我们学习了最简单的void函数——只做事,不“问”不“答”。这里,“答”指的是什么?现在我们来思考一个问题:
如果我们希望函数不仅“做事”,还能“告诉我一个结果”,该怎么实现?
比如,我们想让函数帮我们计算圆的面积,然后把算出来的面积“交给我”用在后面的程序里,这就需要用到返回值。
二、什么是返回值?
返回值,就是函数完成任务后,“交还”给调用者的数据。
就像生活中的例子:
- 你问朋友“今年你几岁?”朋友回答“我今年18岁”——这里朋友“返回”了一个年龄。
- 你在餐厅点了一份套餐,服务员不仅帮你做饭,还把做好的饭端给你——这就是“返回”了一份饭。
在编程中,函数可以把结果返回给我们,这样我们就可以拿到这个结果,继续做下一步操作。
三、有返回值的函数语法
与void函数不同,有返回值的函数,需要:
- 指定返回值类型(比如int、float、char等)
- 使用
return语句把结果交出去
1. 基本语法
返回类型 函数名() {
// ...代码...
return 返回值;
}
比如,计算圆的面积:
float calculateArea() {
float pi = 3.14159;
float radius = 5.0;
float area = pi * radius * radius;
return area; // 把结果“交出去”
}
2. 使用返回值
定义了有返回值的函数之后,我们在主程序里可以这样使用:
int main() {
float result = calculateArea(); // 接收函数返回的结果
printf("圆的面积是: %f\n", result);
return 0;
}
这就像“我要计算圆面积”,程序就把结果算出来还给你,你可以用它做其他事情。
值得说明的是,在这里我们形象化地用“交还”这样的表述来形容 函数返回它的返回值的过程,例如这里我们赋值float result = calculateArea();,是通过赋值语句将函数的返回值赋值给了result。
与“交还”相较,更严谨的说法是函数的返回值可以视作函数这一表达式代表的值。例如已知某函数func()的返回值由return 42;确定为42,那么int number = func();与int number = 42;等价。
除了赋值,返回值与普通变量一样,可以用在表达式的表达中。例如:
#include <stdio.h>
int func() {
return 42;
}
int main() {
if (func() >= 10) {
// 把函数写在条件表达式里,执行完毕后用返回值作比较。
printf ("%d", func());
// 把函数写在printf的变量列表里,执行完毕后用返回值带入%d。
}
}
此外,即使函数有返回值,我们可以不对返回值做任何操作。例如:
#include <stdio.h>
int foo(){
printf("函数foo()被调用了!");
return 132;
}
int main(){
foo();
return 0;
}
尽管在这里foo()函数有返回值132,但与前面例子中用返回值对变量赋值的操作相较,我们在调用时写下:
foo();
没有对返回值进行任何处理。这样的写法是合法的,但在函数执行完后,返回值自然地被舍弃了。如果后续不需要该结果,这种写法在实际开发中也很常见。
四、return语句详解
- return是函数用来“交还结果”的关键语句。
- 遇到
return时,函数会立刻结束,并“把结果交出去”。 - 如果函数声明了返回类型,必须用
return返回一个对应类型的值。
在1.1中我们提到,return语句的一个作用是终止所在函数的运行;而这里我们学习到了return的另一个作用:返回函数的返回值。
示例:返回整数
int getNumber() {
return 42;
}
int main() {
int num = getNumber();
printf("你得到的数字是: %d\n", num);
return 0;
}
示例:返回字符
char getGrade() {
return 'A';
}
int main() {
char grade = getGrade();
printf("你的等级是: %c\n", grade);
return 0;
}
五、为什么需要返回值?
-
获取函数计算结果
- 比如求最大值、计算面积、判断是否及格,都需要得到一个结果。
-
让函数更灵活
- 不只是“做事”,还能“交答案”,方便后续使用。
-
代码更简洁
- 可以把复杂的计算封装在函数里,用返回值直接拿结果。
六、实际场景举例
例子:求两个数的和
int sum() {
int a = 5;
int b = 7;
return a + b;
}
int main() {
int result = sum();
printf("两数之和是: %d\n", result);
return 0;
}
例子:获取当前年份(假设已知)
int getCurrentYear() {
return 2025;
}
int main() {
int year = getCurrentYear();
printf("今年是: %d年\n", year);
return 0;
}
七、返回值类型和void的区别
void类型函数:只做事,不返回结果- 其他类型(int、float、char等):做事并返回结果
如果函数需要“交答案”,就不能用void,必须指定正确的返回类型。
八、练习与思考
- 写一个函数,返回你最喜欢的数字,然后在主程序中打印出来。
- 写一个函数,返回你今天的心情(用字符表示,比如'A'表示“很好”,'B'表示“一般”,'C'表示“不太好”)。
- 思考:你觉得返回值对编程有什么帮助?
九、本节小结
- 返回值让函数不仅能“做事”,还能“交答案”
- 用
return语句把结果交出去 - 返回值类型不能用
void - 主程序可以用变量接收函数返回的结果
下一节预告:函数还可以“接受数据”,那就是形参和实参表,让函数变得更灵活!



Comments | NOTHING