首页 > 编程笔记 > C语言笔记 阅读:218

C语言函数的返回值(非常详细)

通义灵码

在 C语言中,函数的返回值是指函数在执行完毕后,通过 return 语句返回给调用者的值。

函数的返回值通常与它自身的返回类型对应,调用者可以利用这个值进行后续操作。例如,标准库中的 strlen() 函数返回字符串的长度,我们可以用这个返回值来判断字符串是否为空。

在 C语言中,返回值是可选的。如果函数不需要返回任何内容,可以使用 void 类型;否则,必须明确指定返回类型,并在函数体内使用 return 语句返回相应的值,这个值可以是数字、字符、指针等。

函数返回值的基本用法

一个带有返回值的函数定义通常遵循以下格式:

返回类型 函数名(参数列表) {
    // 函数体
    return 表达式;  // 返回值必须与返回类型匹配
}

其中:


如果返回类型不是 void,函数必须至少有一条 return 语句;如果是 void,则可以省略 return,或者只写 return; 表示结束函数。


让我们从一个简单的例子开始,定义一个返回两个整数之和的函数:

  1. #include <stdio.h>
  2.  
  3. int add(int a, int b) {
  4. return a + b; // 返回 a 和 b 的和
  5. }
  6.  
  7. int main() {
  8. int result = add(3, 5);
  9. printf("3 + 5 = %d\n", result);
  10. return 0;
  11. }

输出结果:

3 + 5 = 8

在这个例子中,add() 函数的返回类型是 int,通过 return a + b 返回计算结果。调用时,add(3, 5) 的返回值被赋给变量 result,然后打印出来。

无返回值的函数

如果函数只是执行任务而不需要返回值,可以将返回类型设为 void。例如:

  1. #include <stdio.h>
  2.  
  3. void sayHello() {
  4. printf("Hello, world!\n");
  5. }
  6.  
  7. int main() {
  8. sayHello(); // 调用时不需要接收返回值
  9. return 0;
  10. }

输出结果:

Hello, world!

这里,sayHello() 的返回类型是 void,没有 return 语句,调用时直接执行函数体内的代码。

函数返回值的类型

C语言支持多种返回类型,以下是常见的几种情况:

1) 返回基本数据类型

  1. float divide(int a, int b) {
  2. return (float)a / b; // 返回浮点数
  3. }

调用示例:

  • printf("Result = %.2f\n", divide(5, 2)); // 输出 2.50

2) 返回指针

函数可以返回指针,例如返回数组中的某个元素地址:

  1. #include <stdio.h>
  2.  
  3. int* findMax(int *arr, int size) {
  4. int *max = arr;
  5. for (int i = 1; i < size; i++) {
  6. if (arr[i] > *max) max = &arr[i];
  7. }
  8. return max;
  9. }
  10.  
  11. int main() {
  12. int arr[] = {3, 1, 4, 1, 5};
  13. int *result = findMax(arr, 5);
  14. printf("Max = %d\n", *result);
  15. return 0;
  16. }

输出结果:

Max = 5

3) 返回结构体

函数也可以返回自定义结构体。例如:

  1. #include <stdio.h>
  2.  
  3. struct Point {
  4. int x, y;
  5. };
  6.  
  7. struct Point createPoint(int x, int y) {
  8. struct Point p;
  9. p.x = x;
  10. p.y = y;
  11. return p;
  12. }
  13.  
  14. int main() {
  15. struct Point pt = createPoint(3, 4);
  16. printf("Point: (%d, %d)\n", pt.x, pt.y);
  17. return 0;
  18. }

输出结果:

Point: (3, 4)

函数中的return语句

一个函数可以包含多条 return 语句,根据条件返回不同的值。例如:

  1. #include <stdio.h>
  2.  
  3. int max(int a, int b) {
  4. if (a > b) return a;
  5. return b; // 隐含 else
  6. }
  7.  
  8. int main() {
  9. printf("Max = %d\n", max(7, 3));
  10. return 0;
  11. }

输出结果:

Max = 7

一旦执行到某条 return,函数会立即结束,后续代码不会执行。

函数间接返回多个值

C语言函数只能直接返回一个值,但可以通过指针参数间接返回多个结果。例如:

  1. #include <stdio.h>
  2.  
  3. void getMinMax(int a, int b, int *min, int *max) {
  4. *min = (a < b) ? a : b;
  5. *max = (a > b) ? a : b;
  6. }
  7.  
  8. int main() {
  9. int min, max;
  10. getMinMax(3, 7, &min, &max);
  11. printf("Min = %d, Max = %d\n", min, max);
  12. return 0;
  13. }

输出结果:

Min = 3, Max = 7 
这里,函数本身返回 void,但通过指针参数修改了 min  max

函数返回值的使用注意事项

在使用函数返回值时,有几个关键点需要注意:
 

注意事项 说明
类型匹配 返回值的类型必须与函数声明的返回类型一致,否则可能导致未定义行为。例如,声明为 int 但返回 float 会出错。
未返回值 如果返回类型不是 void,但缺少 return,编译器可能警告,且返回值可能是垃圾值。
忽略返回值 调用时可以不使用返回值,但这可能浪费计算结果。例如,printf() 返回写入的字符数,但通常被忽略。
局部变量的指针 不要返回局部变量的地址,因为函数结束后局部变量内存会被释放。例如:int *f() { int x; return &x; } 是错误的。


关于返回局部变量的指针,来看一个错误的例子:

  1. int* badFunction() {
  2. int x = 10;
  3. return &x; // 错误:返回局部变量地址
  4. }

调用这个函数可能导致未定义行为,因为 x 的内存已被释放。

相关文章