指针内部指针:如何在两个指针之间轻松搞定?

时间:2014-11-12 14:07:06

标签: c pointers

这是我的简单练习:

int a = 10;
int b = 5;
int *p = &a;
int **p2 = &p;
int *p3 = &b;
*p = **p2 + *p3;
*p3 = (**p2)--;
*p2 = p3;
**p2 = **p2 + 15;

答案密钥表示a的值为14,b的值为30.怎么样?我非常坚持指针**p2,我需要对这个指针做一些解释。

3 个答案:

答案 0 :(得分:3)

int a = 10;
int b = 5;
int *p = &a;
int **p2 = &p;
int *p3 = &b;

a为10,b为5,p分为ap2分为pp3b

*p = **p2 + *p3;

a的值(pa)设置为**p2p指向的内容:{{1 }})加a(指向b):15

*p3

*p3 = (**p2)--; 的值(bp3)设置为b**p2指向的内容:{{1 }}:15。然后p递减:14。

此时,a为14,a为15。

a

b指向的内容(*p2 = p3; )设置为p2p现在将指向p3指向的内容:*p2

p3

b的值设置为自身加上15:30

答案 1 :(得分:0)

int a = 10;
int b = 5;
int *p = &a;
int **p2 = &p;
int *p3 = &b;

在这些声明和初始化之后,以下所有情况都是正确的:

  p2 == &p
 *p2 ==  p  == &a
**p2 == *p  ==  a == 10
         p3 == &b
        *p3 ==  b ==  5

因此我们可以用指针表达式替换它们指向的东西:

*p = **p2 + *p3 ==> a = a + b // 10 + 5 == 15
*p3 = (**p2)--  ==> b = a--;  // b = 15, a = 14

请记住,x--评估为x的当前值,并且副作用将其减1。 因此,在b = a--中,b在减量之前获得a的值。

表达式

之后
*p2 = p3 // equivalent to p = p3; p now points to the same thing as p3

我们的表现在看起来像

  p2 == &p
 *p2 ==  p ==  p3 == &b
**p2 == *p == *p3 ==  b == 15

离开我们

**p2 = **p2 + 15 ==> b = b + 15

因此,当我们完成后,b为30,a为14。

答案 2 :(得分:0)

:)

int a = 10;
int b = 5;
int *p = &a;
int **p2 = &p;
int *p3 = &b;
*p = **p2 + *p3;
*p3 = (**p2)--;
*p2 = p3;
**p2 = **p2 + 15;

从上面开始 -

1- 10分配给。

2- 5分配给b。

a的3地址分配给指针变量p。

指针变量'p'的4地址分配给p2(指向指针变量的指针)。

将b的地址分配给指针变量p3。

6-我们知道*用于取消引用指针。所以在这里** p2(你可以理解它像*(* p2))首先*将取消引用p2,它将给出a的地址,然后第二个*运算符将使它顺从并给出a的值。所以*(* p2)是a的值。 现在在* p3.p3中的相同表达式中保存b的地址,因此* p3将给出b的值。 你得到的结果是15。

7-在这个表达式中,第一个p2将是deference,然后递减1.如果你知道a现在是15,那么它将在减量后变为14。并且* p3将是15(阅读:http://msdn.microsoft.com/en-us/library/dy3d35h8.aspx)。

8-由于** p2现在为15,因此30将被分配到** p2。 希望我的解释清除你的疑虑。