C++地址和指针

C++ address and pointers

本文关键字:指针 地址 C++      更新时间:2023-10-16

我正在阅读一本C++教科书,我遇到了以下练习。

是真是假?解释:

A. If (x == y) then (&x == &y).
B. If (x == y) then (*x == *y).

教科书上说A是真的,B是假的,但我相信应该是相反的吗?仅仅因为 x == y 并不意味着 &x 和 &y 具有相同的地址,我不明白为什么 B 是假的。

A 是假的。&x == &y的陈述与说0x001F == 0x001E是错误的相同。 然而,B是正确的。通过*x取消引用指针实际上是比较存储在这些地址的值。希望这有帮助。

首先,我解释这个问题,即对于表达式格式良好的任何类型,命题都必须为真。

A. 显然是假的,因为两个对象可以具有相同的值,但不能存储在同一个地址中。但并非所有情况都是错误的。例如,当一个是对另一个的引用时。

B.也是假的,但不太清楚。如果等于和/或取消引用运算符被复杂的功能重载,则不能保证命题成立。但是对于指向基本类型的简单指针,这个命题是正确的。

因此,如果我们忽略非基本类型的可能性,这本书的答案似乎确实是相反的。考虑到重载,B似乎是偶然的,而A只是错了。