int a=10,b=20,*p1,*p2; p1=&a; p2=&b; p1=p2; printf("%d,%d",*p1,*p2); 答案是20,20怎么算?我算的是10,10,不是应该是指针变量p2也指向指针变量p1所指向的变量么

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 02:13:05

int a=10,b=20,*p1,*p2; p1=&a; p2=&b; p1=p2; printf("%d,%d",*p1,*p2); 答案是20,20怎么算?我算的是10,10,不是应该是指针变量p2也指向指针变量p1所指向的变量么
int a=10,b=20,*p1,*p2; p1=&a; p2=&b; p1=p2; printf("%d,%d",*p1,*p2); 答案是20,20怎么算?
我算的是10,10,不是应该是指针变量p2也指向指针变量p1所指向的变量么

int a=10,b=20,*p1,*p2; p1=&a; p2=&b; p1=p2; printf("%d,%d",*p1,*p2); 答案是20,20怎么算?我算的是10,10,不是应该是指针变量p2也指向指针变量p1所指向的变量么
提问:不是应该是指针变量p2也指向指针变量p1所指向的变量么?
回答:不是.
p1=&a; p2=&b; p1=p2;
刚开始p1指向a的地址,p2指向b的地址
但由于p1=p2; 语句,又使得p1指向p2指向的地址(p1=p2;这是一条赋值语句,就是把p2的地址值赋给p1,但p2的地址值并没有改变,所以你提问的答案是否定的),也就是说,p1=p2; 这条语句使得p1间接的指向了b的地址.最终p1,p2都指向了b的地址,所以执行printf("%d,%d",*p1,*p2); 语句
便输出了两次b的值,也就是20,20了