大家好! 我正在使用gcc来编译我的C程序,偶然发现sizeof(void)在C中是1个字节。
这有什么解释吗?我一直认为它是零(如果它真的没有存储)!
谢谢!
答案 0 :(得分:6)
这是gcc的非标准扩展,但有一个基本原理。当您执行指针运算时,添加或删除一个单位意味着添加或删除指向大小的对象。因此,将sizeof(void)
定义为1有助于将void*
定义为指向字节的指针(无类型内存地址)。否则,当p为p+1 == p
时,使用像void*
这样的指针算法会产生令人惊讶的行为。
标准方法是使用`char *用于那种目的(指向字节的指针)。
答案 1 :(得分:1)
这是gcc的特定功能 - 请参阅此处 http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith
或
答案 2 :(得分:0)
通常您不会要求sizeof(void)
,因为您从不使用void
作为类型。我猜你正在尝试的行为取决于具体的编译器。在我的gcc上它也返回1.