c语言题解答,谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/16 02:59:17
int i, j, *p1, *p2;
i='a';
j='b';
p1=&i;
p2=&j;
则建立如下图所示的联系:
p1 i
┏━━━┓ ┏━━━┓
┃ ╂——→ ┃ 'a' ┃
┗━━━┛ ┗━━━┛
p2 i
┏━━━┓ ┏━━━┓
┃ ╂——→ ┃ 'b' ┃
┗━━━┛ ┗━━━┛
图2. 赋值运算结果
这时赋值表达式:
p2=p1
就使p2与p1指向同一对象i, 此时*p2就等价于i, 而不是j,

我看不懂,为什么P2=P1,P2指向的不是j吗,可是j='b'呀,为什么是又i='b'了,我是初学者,请赐教,谢谢!

定义了指针变量P1,P2分别指向i,j
也就是说 现在 *P1='a',*P2='b'

然后把P1赋给P2 此时的P1,P2是地址
P2=P1的意思是 让P1 P2代表同一地址 即&i , *P2=i
也就是*P1='a',*P2='a'
现在的*P2和i等价

就是要弄清 *P1=i 值
P1=&i 地址

但是i的植是没有变的 你的 最后一句"为什么是又i='b'了" 应该是你想错了

首先你要清楚,指针变量里面保存的是地址,而不是普通的数值,P1中保存的是i的地址,P2中保存的是j的地址,
P2=P1,即将P1中保存的地址值赋给P2,那么现在P2中的值是变量i的地址,所以P2指向的当然是i而不是j,而变量i是普通变量,它里面的值,你没有给它从新赋值,当然没有变,i还是等与'a'