年龄;
内景*p;
内景**q;
p=&age;
q=&p;
对于这些变量集,我试图找出指针如何相互工作的逻辑。我已经对它进行了编码,但我希望在精神上能够使用指针逻辑来计算出不同的场景,我正在努力解决这个问题。
案例1:年龄==*p
因此,指针指向内存中的某个位置并存储变量的地址。所以,我的想法是,因为p是一个变量,*p存储它的地址,我们也知道p=&age(p有年龄地址)。所以,*p==age,因为它们实际上有相同的地址。
案例2:年龄=**q
为此我画了一张图表。
我有*q stores地址**q和**q stores地址变量q.So,由于变量q=&p和p=&age,所以q=&age,从而使语句age==*q为真
案例3:年龄==*q
这是假的,但我不知道为什么。*q存储q的地址,该地址与&p相同,并且由于年龄与p相同,该地址与q相同,所以应该相等?我编译了它,但我不明白为什么。
案例4:p==*q
这又是真的。q=&p所以q*存储q的地址,基本上是p的地址。
这就是我对这个问题的看法。任何关于如何处理这个问题的指导/修正,以及我的逻辑中的任何缺陷,都会有很大帮助。
最佳答案
案例1:年龄==*p
所以,指针指向内存中的某个位置,并存储
变数。所以,我的想法是,既然p是一个变量,*p
存储它的地址,我们还知道p=&age(p有age的地址)。
所以,*p==age,因为它们实际上有相同的地址。
是的,你的推理基本上是正确的。不过,我会用不同的方式来表达最后一个位:由于p
包含age
的地址,因此*p
和age
必须指定同一个对象。这就是一元的作用。也可以说,对于指定对象的任何标识符*
。
案例2:年龄=**q
为此我画了一张图表。
我有**q存储地址**q和**q存储变量q的地址。
因为变量q=&p和p=&age,所以q=&age
语句年龄==*q真
是的,你的逻辑基本上是正确的。你也可能会争辩说,通过与案例1相同的推理,确实x
。从案例1,你知道*&x == x
,所以我们可以把它们组合起来说*q == p
,这和*p == age
是一样的。
案例3:年龄==*q
这是假的,但我不知道为什么。*q存储[p]的地址,即
与&p相同[…]
到现在为止,一直都还不错。
[…]由于年龄与p相同
住手!打旗子!*(*q) == age
与**q == age
不同。它与age
是相同的,这是完全不同的。
假设我把我家的街道地址写在一张纸上。报纸和房子一样吗?当然不是。同样地,如果我把一个对象的地址存储在指针变量中,那么指针变量和指针变量中存储的指针值都与指针变量所指向的对象不同。
案例4:p==*q
是的。这与案例1相同。
关于c - 对于此示例,我的逻辑对C语言中的双指针/指针正确吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53730410/