2.2 返回与返回值 | Function Return and Return Value

发布于 2025-09-20  613 次阅读


返回与返回值 | 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;
}

五、为什么需要返回值?

  1. 获取函数计算结果

    • 比如求最大值、计算面积、判断是否及格,都需要得到一个结果。
  2. 让函数更灵活

    • 不只是“做事”,还能“交答案”,方便后续使用。
  3. 代码更简洁

    • 可以把复杂的计算封装在函数里,用返回值直接拿结果。

六、实际场景举例

例子:求两个数的和

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,必须指定正确的返回类型。

八、练习与思考

  1. 写一个函数,返回你最喜欢的数字,然后在主程序中打印出来。
  2. 写一个函数,返回你今天的心情(用字符表示,比如'A'表示“很好”,'B'表示“一般”,'C'表示“不太好”)。
  3. 思考:你觉得返回值对编程有什么帮助?

九、本节小结

  • 返回值让函数不仅能“做事”,还能“交答案”
  • return语句把结果交出去
  • 返回值类型不能用void
  • 主程序可以用变量接收函数返回的结果

下一节预告:函数还可以“接受数据”,那就是形参和实参表,让函数变得更灵活!


这里是 /* Huajidawang */ 的个人主页