在C中是无效的数据types?
在C编程语言中是void
的数据types? 如果是这样,它可以存储什么types的值? 如果我们有int
, float
, char
等来存储值,为什么需要void
?
Void被认为是一种数据types(用于组织目的),但是它基本上是一个关键字,可以用作占位符来放置数据types来表示“无数据”。
因此,你可以声明一个不返回值的例程:
void MyRoutine();
但是,你不能像这样声明一个variables:
void bad_variable;
但是,当用作指针时,则具有不同的含义:
void* vague_pointer;
这声明了一个指针,但没有指定它指向的数据types。
是的, void
是一种types。 无论是数据types取决于你如何定义这个术语, C标准没有。
该标准确定了术语“对象types”。 在C99及更早版本中; void
不是一个对象types; 在C11中,是的。 在标准的所有版本中, void
是不完整的types 。 C11中的变化是,不完整的types现在是对象types的一个子集; 这只是一个术语上的变化。 (另一种types是函数types 。)
C99 6.2.6第19段说:
voidtypes包含一组空值; 这是一个不完整的types,不能完成。
C11标准稍微改变了措词:
voidtypes包含一组空值; 这是一个不完整的对象types,不能完成。
这反映了C11在“对象types”的定义中的变化,包括不完整的types; 它并没有真正改变void
types的性质。
void
关键字也可以在其他一些情况下使用:
-
作为函数原型中的唯一参数types,如
int func(void)
,表示该函数没有参数。 (C ++为此使用了空括号,但是它们在C中表示了其他内容) -
作为函数的返回types,如
void func(int n)
,表示函数没有返回结果。 -
void*
是一个指针types,它没有指定它指向的内容。
原则上,所有这些使用都指向void
types ,但是您也可以将它们视为恰好使用相同关键字的特殊语法。
C标准说, void
是一种不完整的types,不能完成(不像其他不完整的types可以完成)。 这意味着你不能将sizeof
运算符应用于void
,但是你可以有一个指向不完整types的指针。