| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 391 人关注过本帖
标题:求助。。。
只看楼主 加入收藏
mantou9527
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-9-21
收藏
 问题点数:0 回复次数:4 
求助。。。
不能企图通过改变指针形参的值而使指针实参的值改变。
swap(int *p1,int *p2)
{int *p;
 p=p1;
 p1=p2;
 p2=p;
}
main()
{  
int a,b;
int *pointer_1,*pointer_2;
  scanf("%d,%d",&a,&b);
  pointer_1=&a;pointer_2=&b;
  if(a<b) swap(pointer_1,pointer_2);
  printf("\n%d,%d\n",*pointer_1,*pointer_2);
  }
为什么不能通过指针的转换来调换a ,b?
2008-09-21 06:44
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
swap(int *p1,int *p2) 
{
    int p;
    p=*p1;
    *p1=*p2;
    *p2=p;
} 
int main(void)
{  
    int a,b; 
    int *pointer_1,*pointer_2; 
    scanf("%d,%d",&a,&b); 
    pointer_1=&a;
    pointer_2=&b; 
    if(a<b)
        swap(pointer_1,pointer_2); 
    printf("\n%d,%d\n",*pointer_1,*pointer_2);
    getch();
}
2008-09-21 07:18
dongaifei
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2008-9-20
收藏
得分:0 
简单啊,在你的调用函数中你交换的是地址的位置。
2008-09-21 07:47
zhangxin1988
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-9-19
收藏
得分:0 
因为在swap函数中指针*p在赋值以前没有开辟内存空间所以后出现不可 预料的错误,更不能交换实参的值了
2008-09-21 12:04
飞天舞xsj
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-12-25
收藏
得分:0 
1)指针变量作函数参数要遵循实参与形参之间单向"值传递"规则。
2)调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。
上面只是在swap中将p1,p2所指的对象交换了,而并没有将这一结果成功传给pointer_1,pointer_2

2008-09-21 15:40
快速回复:求助。。。
数据加载中...
 
   



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

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