C语言规定,函数的返回值是由 return 语句 来决定的。

(图片来源网络,侵删)
一个函数返回什么值,完全取决于函数执行过程中,return 关键字后面跟着的那个表达式的计算结果。
下面我们来详细分解一下这个规定:
return 语句的核心作用
return 语句在函数中主要有两个作用:
- 立即终止函数的执行:当程序执行到
return语句时,函数会立即停止执行,并将控制权交还给调用该函数的地方。 - 返回一个值:如果函数被声明为返回一个非
void类型的值(即有返回值类型),return语句后面必须跟一个表达式,这个表达式的值会被“带回”给函数调用者。
语法和规则
返回值类型必须匹配
函数在被定义时,必须声明一个返回值类型(int, float, char* 等),函数中 return 语句返回的值的类型,应该与这个声明的类型兼容。

(图片来源网络,侵删)
示例:返回一个整数
#include <stdio.h>
// 函数声明:这个函数将返回一个整数 (int)
int add(int a, int b) {
int sum = a + b;
// return 语句返回了 sum 变量的值,这个值是 int 类型
return sum;
}
int main() {
int result = add(5, 3); // 调用 add 函数,并将返回值赋给 result
printf("The result is: %d\n", result); // 输出: The result is: 8
return 0;
}
在这个例子中,add 函数声明返回 int 类型,return sum; 语句返回的也是一个 int 值,类型匹配。
void 函数的特殊情况
如果一个函数被声明为 void 类型,意味着它不返回任何值,这种函数内部可以没有 return 语句,或者只能使用不带任何值的 return; 语句来提前退出函数。
示例:void 函数
#include <stdio.h>
// 函数声明:这个函数不返回任何值 (void)
void print_message(const char* message) {
printf("Message: %s\n", message);
// 函数执行到这里自然结束,不需要 return 语句
// 如果想提前结束,可以用 return; 但后面不能跟值
// return 123; // 错误!不能在 void 函数中返回值
}
int main() {
print_message("Hello, C!"); // 调用函数,但不接收返回值
return 0;
}
如果没有 return 语句会发生什么?
对于一个非 void 函数(即应该返回一个值的函数),如果它在所有执行路径上都没有 return 语句,这属于未定义行为。
编译器可能会给出警告,但程序仍然可能通过,在这种情况下,函数会返回一个“垃圾值”,这个值是不可预测的,依赖于内存中的当前状态。
示例:危险的未定义行为
#include <stdio.h>
// 这个函数声明要返回一个 int,但代码里没有 return 语句
// 这是一个严重错误!
int get_random_number() {
// 代码执行到这里,函数会返回一个随机的垃圾值
int x = 123;
// x 的值被初始化了,但没有被返回
}
int main() {
int num = get_random_number();
printf("The random number is: %d\n", num); // 输出是不可预测的!
return 0;
}
可以有多个 return 语句
一个函数内部可以有多个 return 语句,通常用于根据不同的条件返回不同的值,一旦任何一个 return 语句被执行,函数就会立即结束。
示例:多个 return 语句
#include <stdio.h>
// 判断一个数是正数、负数还是零
int check_number(int num) {
if (num > 0) {
return 1; // 如果是正数,返回 1
} else if (num < 0) {
return -1; // 如果是负数,返回 -1
} else {
return 0; // 如果是零,返回 0
}
}
int main() {
printf("%d\n", check_number(10)); // 输出: 1
printf("%d\n", check_number(-5)); // 输出: -1
printf("%d\n", check_number(0)); // 输出: 0
return 0;
}
| 规则 | 描述 | 示例 |
|---|---|---|
| 核心决定者 | return 语句决定了函数的返回值。 |
return value; |
| 类型匹配 | return 的值类型必须与函数声明的返回类型兼容。 |
int func() { return 10; } |
void 函数 |
void 函数不能返回值,只能使用 return; 或省略 return。 |
void func() { printf("hi"); } |
缺少 return |
非void函数缺少return是未定义行为,会返回垃圾值。 |
int bad_func() { int x=5; } |
多个 return |
函数可以有多个return,用于在不同条件下返回不同值。 |
if (x>0) return 1; else return 0; |
要回答你的问题:C语言规定,函数的返回值是由 return 语句来指定的。 它是函数向其调用者传递数据和控制权的标准方式。
