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/06/27 14:46:01
![int a=10,b=20,*p1,*p2; p1=&a; p2=&b; p1=p2; printf(](/uploads/image/z/6825684-12-4.jpg?t=int+a%3D10%2Cb%3D20%2C%2Ap1%2C%2Ap2%3B+p1%3D%26a%3B+p2%3D%26b%3B+p1%3Dp2%3B+printf%28%22%25d%2C%25d%22%2C%2Ap1%2C%2Ap2%29%3B+%E7%AD%94%E6%A1%88%E6%98%AF20%2C20%E6%80%8E%E4%B9%88%E7%AE%97%3F%E6%88%91%E7%AE%97%E7%9A%84%E6%98%AF10%2C10%2C%E4%B8%8D%E6%98%AF%E5%BA%94%E8%AF%A5%E6%98%AF%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8Fp2%E4%B9%9F%E6%8C%87%E5%90%91%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8Fp1%E6%89%80%E6%8C%87%E5%90%91%E7%9A%84%E5%8F%98%E9%87%8F%E4%B9%88)
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了