| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1070 人关注过本帖
标题:问个指针的问题,实在不懂了
只看楼主 加入收藏
f1053357205
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:5
专家分:4
注 册:2013-4-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:22 
问个指针的问题,实在不懂了
程序如下
#include "stdio.h"
main()
{
  int a,b;
  int*p1,*p2;
  void swap(int*,int*);
  scanf("%d,%d",&a,&b);
  p1=&a;p2=&b;
  if(a<b)swap(p1,p2);
  printf("%d,%d\n",*p1,*p2);
}
void swap(int *p1,*p2)
{
  int*p;
  p=p1;
  p1=p2;
  p2=p;
}
程序输入3,6时,输出还是3,6
求解释。。。。????
搜索更多相关主题的帖子: include 
2013-04-08 17:15
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:3 
#include "stdio.h"
main()
{
  int a,b;
  int*p1,*p2;
  void swap(int*,int*);
  scanf("%d,%d",&a,&b);
  p1=&a;p2=&b;
  if(a<b)swap(p1,p2);
}
void swap(int *p1,int *p2)    //加个int
{
  int*p;
  p=p1;
  p1=p2;
  p2=p;
  printf("%d,%d\n",*p1,*p2);  //printf调到函数里
}

三十年河东,三十年河西,莫欺少年穷!
2013-04-08 17:47
f1053357205
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:5
专家分:4
注 册:2013-4-5
收藏
得分:0 
回复 2楼 韶志
打字漏下了,但是结果一样啊
为什么不是“6,3”?求解啊。。。???
2013-04-08 17:51
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 3楼 f1053357205
   为什么我能得出结果
图片附件: 游客没有浏览图片的权限,请 登录注册

三十年河东,三十年河西,莫欺少年穷!
2013-04-08 18:00
f1053357205
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:5
专家分:4
注 册:2013-4-5
收藏
得分:0 
为什么指针形参改变了,指针实参的值不会改变
逻辑上感觉是对的呀
难道有规定么?
2013-04-08 18:01
f1053357205
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:5
专家分:4
注 册:2013-4-5
收藏
得分:0 
回复 4楼 韶志
  可是原来程序为什么是错的,大神解释一下
2013-04-08 18:01
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:3 
你想交换指针指向,那就要用指针的指针;这么说吧,你定义了a,b和指针p1和p2来指向a和b,但是函数操作的是跟p1和p2独立的另外两个临时指针变量,所以没有达到目的,除非你传递&p1,&p2;
建议你好好想想怎么通过函数调用交换普通变量和交换指针变量的内容,本质都是一样的
如果要在函数调用里面交换变量,那么要传递该变量的指针,这里的变量当然包括了指针变量
上面修改后的结果在swap里面当然是交换了,要是到了主函数,还是没有交换

[ 本帖最后由 pauljames 于 2013-4-8 18:09 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-04-08 18:02
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 6楼 f1053357205
   不好意思哦     才发现,不能写成这种形式:
void swap(int *p1,int *p2)
{
  int *p;
  p=p1;
  p1=p2;
  p2=p;
 }
因为地址的传送仍然是值传送,即a/b的地址并未改变,所以函数本身也没有意义

正确的操作方法应该是这样的
#include "stdio.h"
main()
{
  int a,b;
  int*p1,*p2;
  void swap(int*,int*);
  scanf("%d,%d",&a,&b);
  p1=&a;p2=&b;
  if(a<b)swap(p1,p2);
   printf("%d,%d\n",*p1,*p2);
}
void swap(int *p1,int *p2)
{
  int p;
  p=*p1;
  *p1=*p2;
  *p2=p;
 
}

三十年河东,三十年河西,莫欺少年穷!
2013-04-08 18:10
a873457781
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2013-4-8
收藏
得分:3 
新手  表示不懂
2013-04-08 18:26
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1510
专家分:9241
注 册:2010-3-16
收藏
得分:3 
指针在内存中也是一个数值,做为函数参数传递的时候,就把这个值传过去,也就是值传递了。函数内的的操作结果带不出来。
2013-04-08 18:26
快速回复:问个指针的问题,实在不懂了
数据加载中...
 
   



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

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