6

可能重复:
空隙的大小是多少?

大家好 !我正在使用 gcc 编译我的 C 程序,只是偶然发现 sizeof(void) 在 C 中是 1 个字节。

对此有什么解释吗?我一直认为它是零(如果它真的什么都不存储)!

谢谢 !

4

3 回答 3

7

这是 gcc 的非标准扩展,但有一个基本原理。当您进行指针运算时,添加或删除一个单位意味着添加或删除指向大小的对象。因此,定义sizeof(void)为 1 有助于定义void*为指向字节(无类型内存地址)的指针。否则,使用指针算术时,您会出现令人惊讶的行为,例如p+1 == pwhen p is void*

标准方法是使用 `char* 来实现这种目的(指向字节的指针)。

于 2010-07-28T07:14:08.863 回答
1

这是 gcc 特有的功能 - 请参见此处 http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith

或者

空的大小是多少?

于 2010-07-28T07:09:22.683 回答
0

通常你不会要求,sizeof(void)因为你从不使用voidas 类型。我猜您正在试验的行为取决于特定的编译器。在我的 gcc 上它也返回 1。

于 2010-07-28T07:11:22.327 回答