C 中指针是地址吗?

问题描述 投票:0回答:1

我总是假设

&
运算符给出变量指向的内存地址。我目前正在查看 MPI 标准文档(https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report/node82.htm)并发现以下内容,这让我很困惑。

但是, & 转换表达式是一个指针,而不是地址。 ISO C 不要求指针(或转换为 int 的指针)的值是所指向对象的绝对地址 --- 尽管这种情况很常见

c
1个回答
0
投票

在实践中,指针地址,但它们附加了额外的限制(编译器可以在假设您不执行某些操作的情况下进行优化,例如不违反严格别名)。

C/C++ 标准记录这些限制的方式是将指针解释为一些抽象实体(根本不提及地址),并记录对它们允许执行哪些操作(如果它们只是地址,则可以执行的操作的子集)。

有些人很喜欢说“指针不是地址!”强调这些额外限制的存在,但这是一种相当令人困惑的表达方式,我更喜欢“有一些限制的地址”心理模型。

© www.soinside.com 2019 - 2024. All rights reserved.