C 指针内指针:如何轻松知道两个指针之间的距离?

C 指针内指针:如何轻松知道两个指针之间的距离?,c,pointers,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,我需要一些关于这个指针的解释 int a = 10; int b = 5; int *p = &a; int **p2

这是我的简单练习:

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
,我需要一些关于这个指针的解释

int a = 10;
int b = 5;
int *p = &a;
int **p2 = &p;
int *p3 = &b;
a
是10,
b
是5,
p
指向
a
p2
指向
p
p3
指向
b

*p = **p2 + *p3;
a
的值(
p
指向
a
)设置为
**p2
(由
p
指向的内容:
a
)加上
*p3
(指向b):15

b
的值(
p3
指向
b
)设置为
**p2
(由
p
指向的内容:
a
):15。然后
a
递减:14

此时,
a
为14,
b
为15

*p2 = p3;
p2
指向的(
p
)设置为
p3
<代码>*p2现在将指向
p3
所指向的内容:
b

**p2 = **p2 + 15;
b
的值设置为自身加15:30

int a = 10;
int b = 5;
int *p = &a;
int **p2 = &p;
int *p3 = &b;
a
是10,
b
是5,
p
指向
a
p2
指向
p
p3
指向
b

*p = **p2 + *p3;
a
的值(
p
指向
a
)设置为
**p2
(由
p
指向的内容:
a
)加上
*p3
(指向b):15

b
的值(
p3
指向
b
)设置为
**p2
(由
p
指向的内容:
a
):15。然后
a
递减:14

此时,
a
为14,
b
为15

*p2 = p3;
p2
指向的(
p
)设置为
p3
<代码>*p2现在将指向
p3
所指向的内容:
b

**p2 = **p2 + 15;
b
的值设置为自身加15:30

int a = 10;
int b = 5;
int *p = &a;
int **p2 = &p;
int *p3 = &b;
a
是10,
b
是5,
p
指向
a
p2
指向
p
p3
指向
b

*p = **p2 + *p3;
a
的值(
p
指向
a
)设置为
**p2
(由
p
指向的内容:
a
)加上
*p3
(指向b):15

b
的值(
p3
指向
b
)设置为
**p2
(由
p
指向的内容:
a
):15。然后
a
递减:14

此时,
a
为14,
b
为15

*p2 = p3;
p2
指向的(
p
)设置为
p3
<代码>*p2现在将指向
p3
所指向的内容:
b

**p2 = **p2 + 15;
b
的值设置为自身加15:30

int a = 10;
int b = 5;
int *p = &a;
int **p2 = &p;
int *p3 = &b;
a
是10,
b
是5,
p
指向
a
p2
指向
p
p3
指向
b

*p = **p2 + *p3;
a
的值(
p
指向
a
)设置为
**p2
(由
p
指向的内容:
a
)加上
*p3
(指向b):15

b
的值(
p3
指向
b
)设置为
**p2
(由
p
指向的内容:
a
):15。然后
a
递减:14

此时,
a
为14,
b
为15

*p2 = p3;
p2
指向的(
p
)设置为
p3
<代码>*p2现在将指向
p3
所指向的内容:
b

**p2 = **p2 + 15;
b
的值设置为自身加15:30

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

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

  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

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

  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

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

  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,并且