可能重复:
空隙的大小是多少?
大家好 !我正在使用 gcc 编译我的 C 程序,只是偶然发现 sizeof(void) 在 C 中是 1 个字节。
对此有什么解释吗?我一直认为它是零(如果它真的什么都不存储)!
谢谢 !
这是 gcc 的非标准扩展,但有一个基本原理。当您进行指针运算时,添加或删除一个单位意味着添加或删除指向大小的对象。因此,定义sizeof(void)
为 1 有助于定义void*
为指向字节(无类型内存地址)的指针。否则,使用指针算术时,您会出现令人惊讶的行为,例如p+1 == p
when p is void*
。
标准方法是使用 `char* 来实现这种目的(指向字节的指针)。
这是 gcc 特有的功能 - 请参见此处 http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith
或者
通常你不会要求,sizeof(void)
因为你从不使用void
as 类型。我猜您正在试验的行为取决于特定的编译器。在我的 gcc 上它也返回 1。