指针的大小是多少?

新手上路,请多包涵

指针的大小是否与其指向的类型的大小相同,或者指针总是具有固定大小?例如…

 int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;

std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";

这会是什么输出? sizeof(xPtr) 返回 4 和 sizeof(yPtr) 返回 1,还是 2 个指针实际上返回相同的大小?

我问这个的原因是因为指针存储的是内存地址,而不是它们各自存储地址的值。

原文由 MGZero 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 489
2 个回答

指针通常具有固定大小,例如。在 32 位可执行文件上,它们通常是 32 位的。有一些例外,例如在旧的 16 位窗口上,当您必须区分 32 位指针和 16 位指针时……通常可以很安全地假设它们在现代桌面操作系统上的给定可执行文件中是统一的.

编辑:即便如此,我强烈警告不要 在你的代码 中做出这个假设。如果你要写的东西绝对有一定大小的指针,你最好检查一下!

函数指针是另一回事——有关更多信息,请参阅 Jens 的回答

原文由 Nathan Monteleone 发布,翻译遵循 CC BY-SA 3.0 许可协议

最近遇到了一个不正确的情况,TI C28x 板可以有一个 sizeof 指针 == 1,因为这些板的一个字节是 16 位,而指针大小是 16 位。更令人困惑的是,它们还有 22-bits 的远指针。我不太确定远指针的大小。

一般来说,DSP 板可能有奇怪的整数大小。

因此,如果您在奇怪的地方寻找,那么 2020 年的指针大小仍然会很奇怪

原文由 Rand McRanderson 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏