我总是假设
&
运算符给出变量指向的内存地址。我目前正在查看 MPI 标准文档(https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report/node82.htm)并发现以下内容,这让我很困惑。
但是, & 转换表达式是一个指针,而不是地址。 ISO C 不要求指针(或转换为 int 的指针)的值是所指向对象的绝对地址 --- 尽管这种情况很常见
在实践中,指针是地址,但它们附加了额外的限制(编译器可以在假设您不执行某些操作的情况下进行优化,例如不违反严格别名)。
C/C++ 标准记录这些限制的方式是将指针解释为一些抽象实体(根本不提及地址),并记录对它们允许执行哪些操作(如果它们只是地址,则可以执行的操作的子集)。
有些人很喜欢说“指针不是地址!”强调这些额外限制的存在,但这是一种相当令人困惑的表达方式,我更喜欢“有一些限制的地址”心理模型。