C 语言中 sizeof(void) 等于 1?
可能的重复:
void 的大小是多少?
大家好! 我正在使用 gcc 编译我的 C 程序,只是偶然发现 C 中的 sizeof(void) 是 1 个字节。
对此有什么解释吗?我一直认为它是零(如果它真的什么也不存储)!
谢谢 !
Possible Duplicate:
What is the size of void?
Hi all !
I am using gcc for compiling my C programs, just discovered accidentally that the sizeof(void) is 1 byte in C.
Is there any explanation for this ? I always thought it to be ZERO (if it really stores nothing) !
Thanks !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是 gcc 的非标准扩展,但有其合理性。当您进行指针算术时,添加或删除一个单位意味着添加或删除指向大小的对象。因此,将
sizeof(void)
定义为 1 有助于将void*
定义为指向字节(无类型内存地址)的指针。否则,当 p 为void*
时,使用诸如p+1 == p
之类的指针算术会出现令人惊讶的行为。标准方法是使用“char*”来达到这种目的(指向字节的指针)。
This is a non standard extension of gcc, but has a rationale. When you do pointer arithmetic adding or removing one unit means adding or removing the object pointed to size. Thus defining
sizeof(void)
as 1 helps definingvoid*
as a pointer to byte (untyped memory address). Otherwise you would have surprising behaviors using pointer arithmetic likep+1 == p
when p isvoid*
.The standard way would be to use `char* for that kind of purpose (pointer to byte).
这是 gcc 的特定功能 - 请参阅此处
http://gcc.gnu。 org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith
或
空隙的大小是多少?
this is a gcc specific feature - see here
http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith
or
What is the size of void?
通常您不会要求
sizeof(void)
因为您从不使用void
作为类型。我想您正在尝试的行为取决于特定的编译器。在我的 gcc 上它也返回 1。Usually you don't ask for
sizeof(void)
since you never usevoid
as type. I guess the behavior you are experimenting depends on the specific compiler. On my gcc it returns 1 as well.