指针的大小是否与其指向的类型的大小相同,或者指针总是具有固定大小?例如…
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 许可协议
指针通常具有固定大小,例如。在 32 位可执行文件上,它们通常是 32 位的。有一些例外,例如在旧的 16 位窗口上,当您必须区分 32 位指针和 16 位指针时……通常可以很安全地假设它们在现代桌面操作系统上的给定可执行文件中是统一的.
编辑:即便如此,我强烈警告不要 在你的代码 中做出这个假设。如果你要写的东西绝对有一定大小的指针,你最好检查一下!
函数指针是另一回事——有关更多信息,请参阅 Jens 的回答。