在 C 语言中,void 其实跟 int、float、double 等一样的,也是一种类型符。但 void 类型表示 “无类型(即没有值可以获得)”,因此我们不可以使用它来定义 “变量” 或 “常量” ,但可以用于定义指向 void 类型的 “指针” 。C 语言中的 void 类型主要用于以下几个方面。
- 函数返回值的类型。
- 函数参数的类型。
- 指针的类型。
void 类型用于函数返回值
在 C 语言中,函数名前面加上 void,表示的是这个函数返回值为空。需要注意的是,对于返回值为空的函数,它的内部可以没有 return 语句,或者也可以使用 “return;” 语句。
示例 1:函数返回值为 void 类型
#include <stdio.h>
void sum(int a, int b)
{
printf("%d", a + b);
}
int main(void)
{
sum(10, 20);
return 0;
}运行结果如下。
30分析:
对于这个例子的 sum() 函数来说,下面 2 种方式是等价的。“return;” 表示返回空,也就是没有返回值的意思。
// 方式 1
void sum(int a, int b)
{
printf("%d", a + b);
}
// 方式 2
void sum(int a, int b)
{
printf("%d", a + b);
return;
}void 类型用于函数参数
在 C 语言中,如果函数不需要参数(即不带参数)时,我们可以将参数类型声明为 void。
示例 2:函数参数为 void 类型
#include <stdio.h>
void hello(void)
{
printf("欢迎来到绿叶网!");
}
int main(void)
{
hello();
return 0;
}运行结果如下。
欢迎来到绿叶网!分析:
如果函数不带参数,它可以不声明参数类型,或者将参数类型声明为 void。虽然在简单定义时效果类似,但在 C 语言标准中,hello() 表示参数未定义,而 hello(void) 明确表示无参数。为了代码安全,我们强烈建议使用 hello(void)。
// 方式 1(推荐)
void hello(void)
{
printf("欢迎来到绿叶网!");
}
// 方式 2
void hello()
{
printf("欢迎来到绿叶网!");
}提示: 在旧的 C 标准中,也可以使用空的括号 () 来表示函数不接受参数,但使用 (void) 更加清晰和规范。
void 类型用于指针
在 C 语言中,void 类型的指针(void *)是一种特殊的指针,它可以指向任何数据类型的内存地址。因此,void 指针通常被称为 “通用指针” 或 “无类型指针” 。
对于指针的使用,我们将在后面 “C 指针” 一节中再详细介绍。
示例 3:void 类型的指针
#include <stdio.h>
int main(void)
{
void* p;
int year = 2025;
p = &year;
printf("%p", p);
return 0;
}运行结果如下。
0x7ffdb06d009c分析:
void 类型的指针可以指向任何类型的对象,但在使用之前需要进行类型转换。(int*)p 表示将 p 转换为 int* 类型的指针,此时得到的结果还是一个指针。
如果想要获取指针指向的值,还需要进一步使用 “*” 来获取。对于上面例子来说,如果想要获取指针指向的值,还需要进一步使用 “*” 来获取。我们可以通过 *(int*)p 来获取整数值,例如:printf("%d", *(int*)p);,运行结果如下。
2025最后,对于 C 语言中的 void 类型,我们还需要清楚以下几点。
- 标准 C 语言不允许对 void 类型使用 sizeof 运算符,因为它是空类型(不完全类型)。
- void 类型的变量不能直接赋值,也不能进行任何运算。
- void 类型的指针在使用之前,需要进行类型转换。
