C++中实现的交换两个数的值

<pre name="code" class="cpp">#include <iostream>  
void swap0(int a,int b)  
{  
    int temp;  
    temp=a;  
    a=b;  
    b=temp;  
} 

void swap0(int &a,int &b)  
{  
    int temp;  
    temp=a;  
    a=b;  
    b=temp;  
} 

void swap2(int *a ,int *b)  
{  
    int temp;  
    temp=*a;  
    *a=*b;  
    *b=temp;  
}  
  
int main()  
{  
    using namespace std;  
    int s1,s2;  
    cin>>s1;  
    cin>>s2;  
    swap0(s1,s2);  
    cout<<s1<<" ";  
    cout<<s2<<endl;  
    swap2(&s1,&s2);  
    cout<<s1<<" ";  
    cout<<s2<<endl;  
    swap1(s1,s2);
    cout<<s1<<" ";  
    cout<<s2; 
	return 0;
}  
 
 

程序输入 1  2

输出结果为 1 2

     1 2

     2 1

     1 2

从程序的输出可以看出,swap0未实现交换两个数的值,而后面的swap1和swap2均实现了交换两个数的值。先分析按值传递和按引用传递如下:


按值传递时,因为a和b是S1和S2的两个副本,所以改变的是a和b的值,S1和S2的值并未发生交换,按引用传递时,a和b就是S1和S2,只是名称不同而已,所以交换a和b的值的时候也就交换了S1和S2的值。对于按指针传递的时候,a和b是S1和S2的地址,交换时就是交换*a和*b所指的值,所以交换也是成功的。



  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值