| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1845 人关注过本帖
标题:[求助]关于swap函数
只看楼主 加入收藏
六道
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-28
收藏
 问题点数:0 回复次数:14 
[求助]关于swap函数

swap(a,b);
void swap(int x,int y)
{
int temp=x;
x=y;
y=temp;
}
不能交换a,b值


swap(&a,&b);
void swap(int *x,int *y)
{
int temp=*x;
*x=*y;
*y=temp;
}
交换了a,b的值


一直想不通为何的一个不行?有朋友能解释详细点么?
搜索更多相关主题的帖子: swap 函数 
2007-10-19 22:34
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 
void swap(int x,int y)
{
int temp=x;
x=y;
y=temp;
}

int main()
{
int a = 3;
int b = 5;
swap(a,b);
}

swap参数x, y其实就是复制a, b的值。

你说,x, y交换后, 对a,b的值有影响吗?

★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-20 01:10
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
参看 按值调用和按引用调用

Fight  to win  or  die...
2007-10-20 10:23
六道
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-28
收藏
得分:0 

谢谢~


★孤独的人是可耻的★
2007-10-20 19:59
蓝莲之鸟
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-10-20
收藏
得分:0 

行参和实参类型都不一致,当然不能传递值了


2007-10-21 13:05
六道
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-28
收藏
得分:0 
以下是引用蓝莲之鸟在2007-10-21 13:05:08的发言:

行参和实参类型都不一致,当然不能传递值了

类型没错,应该是实参传向行参是单向的,虽然x,y交换了,但不会影响a,b的值.
但void swap(int *x,int *y)这个交换*x,*y值后,swap(&a,&b)后&a,&b地址里面的值发生交换了.所以a,b交换了.

个人理解,不对的话请楼下指出~


★孤独的人是可耻的★
2007-10-21 15:04
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用aipb2007在2007-10-20 10:23:02的发言:
参看 按值调用和按引用调用


明明是指针嘛.


倚天照海花无数,流水高山心自知。
2007-10-22 10:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
值传递是不会改变实参的.
用地址来传递是改变地址里面的值,不会改变地址(相对行参来说也是个值).

倚天照海花无数,流水高山心自知。
2007-10-22 10:39
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

拿这个来一个一个测试就知道了.
#include<stdio.h>
void swap1(int x,int y)
{
int temp=x;
x=y;
y=temp;
}

void swap2(int &x,int &y)
{
int temp=x;
x=y;
y=temp;
}

void swap3(int *x,int *y)
{
int temp=*x;
*x=*y;
*y=temp;
}

void swap4(int *x,int *y)
{
int *temp=x;
x=y;
y=temp;
}

int main()
{
int a = 3;
int b = 5;
printf("a=%d\nb=%d\n",a,b);
swap4(&a,&b);
printf("a=%d\nb=%d\n",a,b);
return 0;
}


倚天照海花无数,流水高山心自知。
2007-10-22 10:39
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
以下是引用nuciewth在2007-10-22 10:31:04的发言:


明明是指针嘛.

指针就是引用类型,引用类型传递的是地址,而值类型形参只是实参的一个拷贝。


------------------不为别的,就为你,我的理想!-----------------
2007-10-22 12:27
快速回复:[求助]关于swap函数
数据加载中...
 
   



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

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