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