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