| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1949 人关注过本帖
标题:关于指针交换两个值的问题
只看楼主 加入收藏
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:10 
关于指针交换两个值的问题
#include<stdio.h>
main()
{
   int n=2,m=3;
   int *p1,*p2,*temp;
   p1=&n;
   p2=&m;
   temp=*p1;
   *p1=*p2;
   *p2=temp;
   printf("%d %d",n,m);

   }
为什么n和m可以交换呢?temp=*p1不是把值给指针了吗?请大家解答一下,讲解一下程序运行过程,谢谢 谢谢 谢谢!!!
2016-11-23 21:14
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
int temp; 不好吗?
2016-11-23 21:23
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:5 
#include<stdio.h>
main()
{
   int n=2,m=3;
   int *p1,*p2,*temp;
   p1=&n;
   p2=&m;
   printf("n的地址%p,p1的值%x\n",&n,p1);
   printf("m的地址%p,p1的值%x\n",&m,p2);
   temp=p1;
   p1=p2;
   p2=temp;
   printf("n的地址%p,p1的值%x\n",&n,p1);
   printf("m的地址%p,p1的值%x\n",&m,p2);
}
2016-11-23 21:32
止步于未来
Rank: 2
等 级:论坛游民
威 望:1
帖 子:22
专家分:67
注 册:2016-11-24
收藏
得分:0 
你不会以为,a变量赋值给b变量后,a变量的值就没了?这是错的,a赋值给b后,a的值还是原来的(就像复制一样的),并没有被释放,除非在别的情况下a的生命周期到了,就会被释放。

一步一脚的向前
2016-11-24 17:33
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 2楼 吹水佬
嗯,就是编译 的时候打出来一看还可以运行,就不懂了

育帝
2016-11-24 19:21
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 4楼 止步于未来
嗯,谢啦,但是回答和我问的不是一个啊

育帝
2016-11-24 19:39
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
忽略

[此贴子已经被作者于2016-11-24 21:40编辑过]


早知做人那么辛苦!  当初不应该下凡
2016-11-24 19:56
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 7楼 炎天
那不就是把 值 赋值 给指针了吗?指针不是指向地址码?类似temp=&n,*temp=5;新手勿怪

育帝
2016-11-24 21:10
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:3 
int temp 和 int *temp其实在这题来说是等效的,*temp根本没有的*根本没有利用,因为temp并没有指向一个有意义的地址。
p1的地址就是n的地址。*p1就是读取p1地址指向的数据~就是读取&n指向的数据~
三楼已经解释得很清楚了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-24 22:45
止步于未来
Rank: 2
等 级:论坛游民
威 望:1
帖 子:22
专家分:67
注 册:2016-11-24
收藏
得分:3 
回复 6楼 育帝
好吧,我猜到你的疑问了
      这个: temp=*p1;
             *p1=*p2;
             *p2=temp;

*p1 ,*p2 代表的是:指针变量p1 / p2所指向变量的值,所以此时交换的是m,n的值而并不是地址。
         int temp;   //这点的temp不是指针变量,如果是,那下一行的赋值就是错误的。
         temp= p1;
         p1= p2;
         p2= temp;
这样的话,就是交换了地址,而并没有交换m,n的值。

一步一脚的向前
2016-11-25 13:00
快速回复:关于指针交换两个值的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029900 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved