指向 4 个字节的双精度指针如何指向 8 个字节的双精度?

How can a pointer to double that is 4 Bytes point to double that is 8 Bytes?

我有一个天真的问题:

A double 即使在 32 位机器上也是 8 字节,也是 long long,我们知道该实现上的指针大小仅为 4 字节。因为那跟处理器的寄存器大小有关系。因此处理器寄存器必须能够寻址任何数据类型。

这是我的代码,运行 带有编译器标志 -m32:

std::cout << "size of double: " << sizeof(double) << '\n'; // 8
std::cout << "size of double*: " << sizeof(double*) << '\n'; // 4

问:那么4字节的double指针如何指向8字节(double对象)?

答:因为“指针”与“指向”的不同。

想一想:你的“指针”可以指向一个双精度...一个浮点...一个字符。

问:这是否意味着 double 在 64 位系统上比在 32 位系统上更有效?谢谢!

A:不是,只是说64位机器可以直接访问更大的地址space.

这里有一个很好的指针教程:

Pointers in C Programming: What is Pointer, Types & Examples

这里有一篇关于“内存寻址”的好文章:

Virtual address spaces