鱼C论坛

 找回密码
 立即注册
查看: 2442|回复: 2

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

[复制链接]
发表于 2014-5-21 10:04:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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;
}运行结果如下

QQ截图20140521100257.jpg
QQ截图20140521094634.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 上的人,这次只是人交换了位置,地点是没变的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-23 08:55:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 02:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表