首页 >后端开发 >C++ >C 中所有指针的大小都相同吗?

C 中所有指针的大小都相同吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-31 00:14:30819浏览

 Are All Pointers the Same Size in C  ?

C 中所有指针的大小都相同吗?

问题是 C 中的所有指针是否共享统一的大小。虽然人们经常认为,C 标准对这个问题提供了明确的见解。

C 标准规范

C 标准明确保证:

  • void 和 char 大小相等([basic.compound]/5 部分)。
  • 指向同一类型的不同 cv 限定版本的指针 (T const, T易失性 和 T const 易失性*) 共享相同的大小 ([basic.compound]/3)。
  • 指向具有相同底层类型的枚举类型的指针具有相同的大小([dcl.enum] 部分) /9).

实际注意事项

实际上,指向类类型的指针通常保持相同的大小。这是因为编译器必须在不完全定义 T 的情况下确定 T* 的大小。虽然编译器在调整指针大小方面具有一定的灵活性,但在现实场景中很少使用。

此外,函数指针、指向数据成员的指针和指向函数成员的指针通常具有相同的大小。这允许在这些指针类型之间进行无缝的重新解释转换。

异常

分段架构中出现一个值得注意的异常,其中近指针和远指针的大小可能不同。这种情况违反了指针大小统一的通常规则。

结论

C 标准阐明了 void* 和 cv 限定的指针具有统一的大小。虽然指向不同类型的指针通常继承相同的大小,但实际考虑表明,指向类类型的指针、函数指针和指向数据成员的指针都共享统一的大小。然而,分段架构存在一个例外,近指针和远指针可能具有不同的大小。

以上是C 中所有指针的大小都相同吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn