| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 662 人关注过本帖
标题:关于值得交换(为什么)
只看楼主 加入收藏
wangchaowushang
Rank: 1
来 自:陕西
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-12-19
收藏
 问题点数:0 回复次数:5 
关于值得交换(为什么)
main()
{
  int a,b;
 printf("a=%d,b=%d\n",a,b);
 swap(a,b)
printf("after swap\t a=%d,b=%d",a,b);
}
 swap(int x,int y)
{
 int temp;
 temp=x;
  x=y;
  y=temp;
}
为什么这样做a,b的值没有发生交换?
2008-03-20 11:56
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
这是关于函数的形参与实参与返回值的问题。函数的值传递是单向的,实参只能传递值给形参,形参不能传递值回实参,只能以返回值的形式传递给主调函数一个值。
    如果想交换两数值,最好用指针,那样就可以交换成功了。如果还不想用指针,就不要用交换函数,直接在主函数里面交换,就可以了。
2008-03-20 12:03
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
传递的并非同一段地址,也就是单向传递.

/*这样就改变了*/
#include<stdio.h>
main()
{
  int a,b;
  scanf("%d %d",&a,&b);
printf("a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("after swap\t a=%d,b=%d",a,b);
}
swap(int *x,int *y)
{
int temp;
temp=*x;
  *x=*y;
  *y=temp;
}
2008-03-20 12:10
斜阳牧笛
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-3-16
收藏
得分:0 
在调用涵数中变量改变了,即只在此处交换值,回到主涵数新值会丢失而重新使用旧值.
2008-03-20 12:31
linpeng007
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-5-22
收藏
得分:0 
[bo]以下是引用 [un]xianshizhe111[/un] 在 2008-3-20 12:10 的发言:[/bo]

传递的并非同一段地址,也就是单向传递.

/*这样就改变了*/
#include
main()
{
  int a,b;
  scanf("%d %d",&a,&b);
printf("a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("after swap\t a=%d,b=%d",a,b);
}
swap(int *x,i ...

顶,相当好,指针就是灵活
2008-03-20 12:57
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
你交换的只是栈上参数。
2008-03-20 14:25
快速回复:关于值得交换(为什么)
数据加载中...
 
   



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

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