核心概念:void 是什么?
在 C 语言中,void 是一个关键字,它的字面意思是“无类型”或“空类型”,它主要有两种用途:

(图片来源网络,侵删)
- 用作函数的返回类型:表示这个函数执行完毕后,不返回任何值。
- 用作函数的参数列表:表示这个函数不接受任何参数。
我们今天讨论的重点是第一种用途。
void 作为函数返回类型
当一个函数被声明为 void 类型时,它意味着这个函数的“任务”不是计算并返回一个结果,而是执行一系列操作,
- 打印信息到屏幕。
- 修改传入参数的值。
- 进行文件读写。
- 控制硬件设备等。
示例 1:一个简单的 void 函数
#include <stdio.h>
// 这是一个 void 函数,它的作用是打印一行欢迎信息
void printWelcomeMessage() {
printf("欢迎使用我们的程序!\n");
// 函数执行到这里,任务完成,不需要返回任何值
}
int main() {
printWelcomeMessage(); // 调用这个函数
printf("程序继续执行...\n");
return 0; // main 函数返回 0 表示程序正常结束
}
代码分析:
void printWelcomeMessage(): 这行代码声明了一个名为printWelcomeMessage的函数。void是它的返回类型,告诉编译器和程序员:这个函数调用后,不能将它的结果赋值给一个变量,因为它没有结果。- 表示它不接受任何参数。
- 在
main函数中,我们直接通过printWelcomeMessage();来调用它,注意末尾的分号,它就像一个普通语句一样。
return 语句在 void 函数中的角色
这是一个非常关键的点,也是初学者最容易混淆的地方。

(图片来源网络,侵删)
在 void 函数中,return 语句是可选的。
-
如果不写
return:当函数执行到函数体的最后一个右花括号 时,它会自动返回,程序的控制权会交还给调用者。 -
如果写了
return:它的作用不是“返回一个值”,而是“立即终止当前函数的执行”,并将控制权交还给调用者,在void函数中,return后面不能跟任何表达式或值。
示例 2:void 函数中的 return 用法
#include <stdio.h>
void checkNumber(int num) {
if (num < 0) {
printf("数字是负数,\n");
return; // 如果数字是负数,打印信息后,函数立即结束,下面的代码不会执行
}
// 只有当 num >= 0 时,下面的代码才会执行
printf("数字是非负数,\n");
// 这里没有显式的 return,函数会执行到这里自然结束
}
int main() {
checkNumber(-5); // 输出: 数字是负数。
checkNumber(10); // 输出: 数字是非负数。
return 0;
}
代码分析:

(图片来源网络,侵删)
- 在
checkNumber函数中,return;语句起到了提前退出函数的作用,这是一种常见的编程技巧,用于避免不必要的嵌套if-else语句,使代码更清晰。
常见误区与错误
误区 1:在 void 函数中返回一个值
这是最常见的错误,编译器会直接报错。
// 错误示例!
void getAnError() {
int result = 10;
return result; // 错误!void 类型的函数不能返回值
}
编译器错误信息 (类似):
error: 'return' with a value, in function returning 'void'
误区 2:像使用有返回值的函数一样使用 void 函数
你不能将 void 函数的调用放在赋值语句的右边,因为它没有返回值。
// 错误示例!
void printValue() {
printf("Hello");
}
int main() {
int x = printValue(); // 错误!不能将 void 函数的调用结果赋给 x
return 0;
}
编译器错误信息 (类似):
error: void value not ignored as it ought to be
void 的其他重要用法(作为补充)
为了更全面地理解 void,我们快速看一下它的其他两种用法。
A. void 作为函数参数
这表示函数不接受任何参数。
#include <stdio.h>
// 一个不接受任何参数,也不返回任何值的函数
void systemBeep() {
printf("\a"); // 发出系统提示音
}
int main() {
systemBeep(); // 调用时也不需要传任何参数
return 0;
}
B. void 指针 (void *)
void * 是一个特殊的指针类型,它被称为“通用指针”或“无类型指针”,它可以指向任何类型的数据。
特点:
- 可以指向任何类型:你可以将
int*,char*,float*等直接赋值给一个void*变量,而无需强制类型转换。 - 不能直接解引用:因为编译器不知道
void*指向的内存里到底是什么类型的数据,所以你不能直接对void*进行解引用(如*void_ptr)或指针运算(如void_ptr++),你必须先将其转换回具体的类型。
示例:
#include <stdio.h>
int main() {
int a = 10;
float b = 3.14;
char c = 'A';
// void* 指针可以指向任何类型的变量
void *ptr;
ptr = &a;
// 要获取值,必须先强制转换
printf("a = %d\n", *(int *)ptr); // 输出: a = 10
ptr = &b;
printf("b = %f\n", *(float *)ptr); // 输出: b = 3.140000
ptr = &c;
printf("c = %c\n", *(char *)ptr); // 输出: c = A
return 0;
}
void* 在 C 语言中非常强大,尤其在处理泛型编程、动态内存分配(如 malloc 返回的就是 void*)和底层系统调用时非常常见。
| 概念 | 解释 | 示例 |
|---|---|---|
void 作为返回类型 |
函数不返回任何值。 | void myFunction(); |
void 函数中的 return |
可选的,作用是提前终止函数执行,后面不能跟值。 | if (error) { return; } |
void 作为参数列表 |
函数不接受任何参数。 | void myFunction(void); |
*void 指针 (`void `)** |
通用指针,可指向任何类型,但使用前必须强制转换。 | void *ptr = &some_int; int x = *(int *)ptr; |
记住这个核心区别:
- 有返回值的函数:
return value;(返回一个值) void函数:return;(可选,用于提前退出) 或不写return(执行到末尾自动退出)
希望这个详细的解释能帮助你彻底理解 C 语言中的 void return!
