飘过的春风

小白的进阶

C++传值,传引用,传地址的区别

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

#include <iostream>
using namespace std;

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

void swap1(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()
{
    int s1,s2;
    s1=111;
    s2=222;
    swap0(s1,s2);
    cout<<"swap0结果:";
    cout<<s1<<" ";
    cout<<s2<<endl;

    s1=111;
    s2=222;
    swap1(s1,s2);   //注意用法
    cout<<"swap1结果:";
    cout<<s1<<" ";
    cout<<s2<<endl;

    s1=111;
    s2=222;
    swap2(&s1,&s2);
    cout<<"swap2结果:";
    cout<<s1<<" ";
    cout<<s2<<endl;

    return 0;
}
swap0结果:111 222
swap1结果:222 111
swap2结果:222 111


阅读更多
个人分类: C++和C
上一篇归并排序的实现
下一篇Java子类与父类之间的对象转换(说明继承)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭