【问题标题】:sizeof(void) equals 1 in C? [duplicate]sizeof(void) 在 C 中等于 1? [复制]
【发布时间】:2010-07-28 07:04:36
【问题描述】:

可能重复:
What is the size of void?

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

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

谢谢!

【问题讨论】:

  • void 没有大小,因为void 是不完整的类型。你不能接受不完整类型的sizeof
  • 如果我尝试用这个标题创建一个 SO 问题,我很快就会得到很多关于这一点的“相关问题”......

标签: c sizeof void


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        • 2021-12-06
        • 2019-02-12
        • 2018-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多