yu457001 发表于 2014-5-21 10:04:25

关于指针和变量的使用中是否交换指向位置和值是否交换

本帖最后由 yu457001 于 2014-5-21 10:50 编辑

谁能帮我解答个问题
关于指针和变量的使用中是否交换指向位置和值是否交换的
我怎么就看不出来它们为什么交换了又为什么没有交换。拜托各位给讲解一下,谢谢
两段代码如下
#include<stdio.h>
int jiaohuan(int *p3,int *p2);
int main()
{
int *p1,*p2,a=10,b=6;
p1=&a;
p2=&b;
printf("a=%d,b=%d\n",a,b);//通过交换,a,b的值没有改变
printf("p1=%d,p2=%d\n",p1,p2);//输出p1,p2指向的地址
printf("p1=%d,p2=%d\n",*p1,*p2);
jiaohuan(p1,p2);
printf("a=%d,b=%d\n",a,b);//通过交换,a,b的值没有改变
printf("p1=%d,p2=%d\n",p1,p2);//输出p1,p2指向的地址
printf("p1=%d,p2=%d\n",*p1,*p2);//输出p1,p2指向的地址存放的值
printf("\n\n");
return 0;
}
int jiaohuan(int *p3,int *p4)
{
int t;
if(*p3>*p4)
{
t=*p3;
*p3=*p4;
*p4=t;
}
return 0;
}
运行结果如下
------------------------------------
#include<stdio.h>
int main()
{
int *p1,*p2,a=10,b=6;
int *p;
p1=&a;
p2=&b;
printf("输出最初a,b的值a=%d,b=%d\n",a,b);
printf("输出最初p1,p2指向的地址p1=%d,p2=%d\n",p1,p2);
printf("输出最初p1,p2指向的地址p1=%d,p2=%d\n",*p1,*p2);
if(a>b)
{
p=p1;
p1=p2;
p2=p;
}
printf("交换后a,b的值a=%d,b=%d\n",a,b);
printf("交换后p1,p2指向的地址p1=%d,p2=%d\n",p1,p2);
printf("交换后p1,p2指向的地址存放的值p1=%d,p2=%d\n",*p1,*p2);
printf("\n\n");
return 0;
}运行结果如下

sidfate 发表于 2014-5-21 15:54:24

第一个程序交换的是 p1 和 p2 的值(也就是交换了 *p1 和 *p2 )

t = *p3;
*p3 = *p4;
*p4 = t;
也就相当于:
t = a;
a = b;
b = t;

第二个程序交换的 是 p1 和 p2 (也就是交换的是地址)。你可以理解为 a 和 b 为两个固定的地点,p1 和 p2 是两个站在 a 和 b 上的人,这次只是人交换了位置,地点是没变的。

yu457001 发表于 2014-5-23 08:55:47

sidfate 发表于 2014-5-21 15:54 static/image/common/back.gif
第一个程序交换的是 p1 和 p2 的值(也就是交换了 *p1 和 *p2 )

t = *p3;


非常感谢,你讲的很形象。{:7_168:}
页: [1]
查看完整版本: 关于指针和变量的使用中是否交换指向位置和值是否交换