int年龄;
int * p;
int ** q;
p =&age;
q =&p;
对于这些变量集,我试图弄清指针相互之间如何工作的逻辑。我已经对其进行了编码,但是我希望能够使用我一直在努力的指针逻辑在精神上解决不同的情况。
案例1:年龄== * p
因此,指针指向内存中的某个位置并存储变量的地址。因此,我的想法是,由于p是一个变量并且* p存储了它的地址,所以我们也知道p =&age(p具有年龄的地址)。所以* p == age,因为它们本质上具有相同的地址。
案例2:年龄== ** q
为此,我画了一张图。
我有* q个存储地址** q和** q个存储地址变量q。因此,由于变量q =&p和p =&age,所以q =&age并因此使age == ** q为真
案例3:年龄== * q
这是错误的,但我不确定为什么。 * q存储与&p相同的q的地址,并且由于年龄与与q相同的p相同,因此它应该相等吗?我对其进行了编译,但与之不同,但我不明白为什么。
案例4:p == * q
这又是真的。 q =&p,因此q *存储q的地址,该地址基本上是p的地址。
这就是我对这个问题的看法。关于如何解决此问题的任何指导/更正以及我逻辑中的任何缺陷都将大有帮助。
答案 0 :(得分:2)
案例1:年龄== * p
因此,指针指向内存中的某个位置并存储以下地址: 一个变量。所以,我的想法是,因为p是变量,而* p 存储它的地址,我们也知道p =&age(p具有年龄的地址)。 所以* p == age,因为它们本质上具有相同的地址。
是的,您的推理基本上是正确的。但是,我将最后一句话用不同的措词表示出来:由于p
包含age
的地址,因此*p
和age
必然是同一对象。一元*
就是这样做的。您还可以说,对于指定对象的任何标识符x
,*&x == x
。
案例2:年龄== ** q
为此,我画了一张图。
我有* q个存储地址** q和** q个存储地址变量q。 因此,由于变量q =&p和p =&age,所以q =&age并因此使 语句age == * q true
是的,再次,您的逻辑本质上是正确的。您也可能会争辩说,与案例1相同,*q == p
是对的。从情况1中,您知道*p == age
,因此我们可以将它们结合起来说*(*q) == age
,与**q == age
相同。
案例3:年龄== * q
这是错误的,但我不确定为什么。 * q存储[p]的地址,即 与&p [...]
相同
到目前为止很好。
[...],因为年龄与p
相同
停止!在游戏中标记! age
与p
不相同。它与*p
相同,但完全不同。
假设我在一张纸上写下我家的街道地址。纸和房子一样吗?当然不是。同样,如果我将对象的地址存储在指针变量中,则指针变量和存储在其中的指针值都不会与该值所指向的对象相同。
案例4:p == * q
是的。这与情况1相同。
答案 1 :(得分:0)
对于情况4,您正在尝试将age的值与age的地址进行比较。
应为&age == * q或age == ** q
您可以尝试根据age的地址打印指针的值,您可能会进一步理解。