C 语言中 sizeof(void) 等于 1?

发布于 2024-09-11 08:42:52 字数 284 浏览 3 评论 0原文

可能的重复:
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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

倦话 2024-09-18 08:42:52

这是 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 defining void* as a pointer to byte (untyped memory address). Otherwise you would have surprising behaviors using pointer arithmetic like p+1 == p when p is void*.

The standard way would be to use `char* for that kind of purpose (pointer to byte).

℡寂寞咖啡 2024-09-18 08:42:52

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

Usually you don't ask for sizeof(void) since you never use void as type. I guess the behavior you are experimenting depends on the specific compiler. On my gcc it returns 1 as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文