C void 类型

在 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 类型的指针在使用之前,需要进行类型转换。
给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号