一个void变量可以用来做什么?

10

例如,如果我创建了变量:

void helloWorld;

它有什么用?由于它代表着空值,起初我认为它没有任何用处。我知道函数使用void表示无返回值,但变量有用途吗?

--编辑--

我已经找到答案。我现在知道,像Java、C++和C这样的编程语言中,void变量是非法的。感谢你们所有人的回答!


1
这将导致java编译错误。除非你的意思是Void - Sotirios Delimanolis
严格来说,对于Java编程语言而言,void是一个关键字,不能与变量一起使用。不过,Void是一个无法实例化的对象,支持void关键字,并且由于它是一个对象,它实际上可以用作类型。 - Fritz
4
我相当确定在你所询问的三种语言中都无法定义一个void变量,这使得这个问题有些无意义。 - Mike Seymour
我想知道OP只有14岁!你的问题值得+1。 - haccks
@ryyker 是的,但是 OP 没有询问 void*,他询问的是 void - Andre Kostur
显示剩余2条评论
5个回答

11

void变量在C/C++中是无效的,因为编译器无法确定它们的大小。 void仅作为函数参数列表(不带参数)或返回类型(无返回值)时有效。

有一个void *,它只是表示“任何类型指针”,是通用指针类型,但不允许对其进行取消引用操作。


2
严格来说,它们无效的原因是void是一种不完整类型 - R.. GitHub STOP HELPING ICE
@R..; 是的,你说得对。这是因为类型不完整(C99 6.2.6第19段)。 - haccks

6
C99 6.2.6第19段说:
“void”类型包含一组空值;它是一个不完整的类型,不能完成。
此外,在C中,“void”是一种没有大小的类型。因此,如果您声明一个“void”类型的变量,编译器将不知道为其分配多少内存。 所以,由于它是不完整的类型,您不能声明一个“void”变量
只有在涉及指针(“void *”)时,“void”才有用,因为它允许您声明一个通用指针而不指定类型。
阅读Keith Thompson提供的答案以获得更详细的解释。

在C语言中声明一个void helloWorld变量是_可能的_(但没有用的)?如果能提供你所使用的标准文档的参考资料,那就更好了。 - MarnixKlooster ReinstateMonica
2
那个答案并没有声明一个void变量:它评估了一个非void变量表达式并将其转换为void。我刚试图让gcc接受一个变量声明void helloWorld(而不是表达式(void) helloWorld,其中helloWorld被声明为非void),但失败了。 - MarnixKlooster ReinstateMonica
@MarnixKlooster;我在这个教程中读到了这个。 - haccks
3
@MarnixKlooster,这个代码是无效的,因为void是一个不完整的类型(C99 6.2.5§19),而且没有链接的标识符必须具有完整的类型(C99 6.7§7)。另一方面,你可以有一个(完全无用的)声明,例如extern void x; - Virgile
3
@Virgile: extern void x; 可能具有(非可移植的)用途:在内联汇编或外部汇编文件中,&x 可以用于获取汇编标签的地址。这反过来又可以用于确定从信号处理程序中保存的程序计数器是否位于两个特定汇编标签之间。 - R.. GitHub STOP HELPING ICE
显示剩余2条评论

3
在Java中,你不能使用void作为变量类型。但是你可以使用Void

Void类是一个不可实例化的占位符类,用于保存表示Java关键字void的Class对象引用。

你不能对它做任何操作,除了获取Class对象,但那是一个static字段,所以你不需要一个对象引用。

1
在C语言中,您可以将函数参数强制转换为void类型。
(void)myarg;

这只对处理未使用的参数警告有用。

0

我觉得你不知道 'void' 是什么吧?

关于 void 的简短信息:

void 不是像 int 或 char 那样用来声明变量的数据类型。

void 是一种返回类型。

void 返回类型用于表示我们从此函数中返回的是空值。

如果你不返回任何东西,那么你必须将 void 写作函数的返回类型(包括主函数)。或者你可以说....

return 0;

在函数定义的末尾。
希望这能帮助你理解什么是void。

这与任何编程语言(C、C++、Java、C#、VB.NET、JS、Motif、脚本语言、Pascal、COBOL)都是一样的... 几乎无处不在。 - nikhil
1
我知道 void 类型是什么,我只是在问它能否用于变量中。我现在基本上已经得到了答案,所以感谢你的回答。我将在上面的帖子中宣布我已经得到了答案... - Taking1n1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接