66

voidC编程语言中的数据类型吗?如果是这样,它可以存储什么类型的值?如果我们有int, float,char等来存储值,为什么void需要?而虚空的范围是多少?

4

3 回答 3

96

Void 被认为是一种数据类型(出于组织目的),但它基本上是一个关键字,用作放置数据类型的占位符,表示“无数据”。

因此,您可以将不返回值的例程声明为:

void MyRoutine();

但是,您不能像这样声明变量:

void bad_variable;

但是,当用作指针时,它具有不同的含义:

void* vague_pointer;

这声明了一个指针,但没有指定它指向的数据类型。

于 2010-08-15T14:13:01.143 回答
34

是的,void是一种类型。是否是数据类型取决于您如何定义该术语;C标准没有。

该标准确实定义了术语“对象类型”。在 C99 及更早版本中;void不是对象类型;在 C11 中,它是。在标准的所有版本中,void都是不完整的类型。C11 中的变化是不完整类型现在是对象类型的子集。这只是术语的变化。(另一种类型是函数类型。)

C99 6.2.6 第 19 段说:

void类型包含一组空值;它是一个不完整的类型,无法完成。

C11 标准稍微改变了措辞:

void类型包含一组空值;它是无法完成的不完整对象类型。

这反映了 C11 对“对象类型”定义的改变,包括不完整类型;它并没有真正改变 type 的性质void

void关键字也可以在其他一些上下文中使用:

  • 作为函数原型中唯一的参数类型,如int func(void),表示该函数没有参数。(C++ 为此使用空括号,但它们在 C 中表示其他含义。)

  • 作为函数的返回类型,如 中void func(int n),表示该函数不返回结果。

  • void*是一个指针类型,它没有指定它指向什么。

原则上,所有这些用法都是指type void,但您也可以将它们视为碰巧使用相同关键字的特殊语法。

于 2012-12-27T20:21:43.180 回答
8

C标准说这void是一个不能完成的不完整类型(与其他可以完成的不完整类型不同)。这意味着您不能将sizeof运算符应用于void,但您可以拥有指向不完整类型的指针。

于 2012-12-27T20:11:54.013 回答