如果我使用void
声明任何变量,则会出错,但sizeof(void)
为1。
这是什么原因?
void var; // it gives error
printf("sizeof(void) = %d", sizeof(void)); //prints 1
答案 0 :(得分:6)
sizeof (void)
在C中无效,并且在GNU C中被允许作为允许使用void *
的指针算法的扩展。
来自gcc
documentation:
在GNU C中,指向void的指针和指向函数的指针都支持加法和减法操作。这是通过将void或函数的大小视为1来完成的。[...]这样做的结果是在void和函数类型上也允许sizeof,并返回1.
答案 1 :(得分:0)
从C和Algol68派生的几种编程语言中的void类型是正常返回的函数的结果类型,但不向其调用者提供结果值。通常会调用此类函数的副作用,例如执行某些任务或写入其输出参数。 据我所知,你不能使用void作为数据类型,因为值为true或false语句,布尔值默认为1,因此,它打印1。
答案 2 :(得分:0)
c.f。是否有一个特定的原因,为什么“void”不是简单地定义为具有适当的投射规则的“typedef struct {} void”(即一个空结构)? ......
最初由Steve Bourne AB33/Mar 1972 Algol68为splitjoin建议...
注意:Algol68没有指针算术......但阵列切片可用。