美文网首页
C++中两个变量交换的三种方法,以及对指针的理解

C++中两个变量交换的三种方法,以及对指针的理解

作者: Xeon_CC | 来源:发表于2019-06-16 19:47 被阅读0次
    #include<iostream>
    using namespace std;
    void swap1(int x,int y);
    void swap2(int *px,int *py);
    void swap3(int &x,int &y);
    int main(){
        int a=1,b=2;
        int *pa=&a,*pb=&b;    /*定义的指针变量的时候,也就是说指针变量前面有int,float,char等关键字的时候。
                               *pa并不表示指针变量,*是指一个指针变量的标志,其实pa才表示指针变量。
                               当没有int,float,char等关键字的时候,我们试着打印一下*pa,它会打印出一个a的值,那就是1,
                               这个表示a的地址对应的值,然后再打印一下pa,它会打印出一个地址就是a的地址,
                               坦白说,"int *pa=&a"里面的*pa和直接写个"*pa"是不同的意思!*/
                               /*我们可以理解为“int *pa=&a”里面的“*pa”和单独的”pa“是一样的意思,都表示地址; 单独的“*pa”表示地址a对应的值*/
                 //*pa,pa,&pa三者的含义是什么?
                 //cout<<*pa;打印的是a的地址对应的值,就是1。
                 //cout<<pa;输出指针变量pa的值,它的值就是a的地址。
                 //cout<<&pa;输出变量pa的地址,当然变量a的地址和变量pa地址是不一样的
        cout<<"swap1之前打印地址"<<&a<<"   "<<&b<<endl;
        cout<<"swap1之前打印值"<<a<<"   "<<b<<endl;
        swap1(10,20);    /*发现swap1(a,b)和swap1(10,20)的结果仅仅表现在函数内部,
                          所以当swap1(a,b)的时候,只是把普通是数字1和2赋值进去了,
                          并没有真正把a和b的值传进去,所以a和b的值是不会交换的;
                          swap2和swap3函数中,不能像swap1函数一样直接赋数值进去*/
        cout<<"调用swap1之后打印值:"<<"a="<<a<<"\t"<<"b="<<b<<endl;
        cout<<"调用swap1之后打印地址"<<&a<<"   "<<&b<<endl;
        //=========================================================================================================
        cout<<"==========================================================================================="<<endl;
        
        
        
        a=1;b=2;
        cout<<"swap2之前打印地址"<<&a<<"   "<<&b<<endl;
        cout<<"swap2之前打印值"<<a<<"   "<<b<<endl;
        swap2(pa,pb);
        cout<<"调用swap2之后打印值:"<<"a="<<a<<"\t"<<"b="<<b<<endl;
        cout<<"调用swap2之后打印地址"<<&a<<"   "<<&b<<endl;
        //========================================================================================================
        cout<<"==========================================================================================="<<endl;
        
        
        
        a=1;b=2;
        cout<<"swap3之前打印地址"<<&a<<"   "<<&b<<endl;
        cout<<"swap3之前打印值"<<a<<"   "<<b<<endl;
        swap3(a,b);
        cout<<"调用swap3之后打印值:"<<"a="<<a<<"\t"<<"b="<<b<<endl;
        cout<<"调用swap3之后打印地址"<<&a<<"   "<<&b<<endl;
    }
    
    
    
    
    void swap1(int x,int y){    //调用swap1(a,b)时候,里面的a和b并没有指定是a的值和b的值,只代表单纯的数字而已。
        int tmp=x;                //打比方,A同学拿着苹果,B同学拿着香蕉,程序并没有从A,B两个同学手里把两种水果交换,
        x=y;                    //而是自己另外买了苹果和香蕉,然后把两种水果交换了。结果A同学还是拿着苹果,B同学还是拿着香蕉,所以没有交换
        y=tmp;                    //也可以理解为swap1函数仅仅对函数内部起作用
        cout<<"swap1函数内部打印x,y的值:"<<x<<"\t"<<y<<endl;
    }
    void swap2(int *px,int *py){    //使用swap2(pa,pb)传进变量a和b的地址
        int tmp;
        tmp=*px;                    //pa和pb的值,也就是a和b的地址信息,传进去以后,仅仅对a和b的值进行交换;
        *px=*py;                    //为什么用指针才能交换?直接交换就不行?有指针才能告诉a和b地址在哪里呀,知道他们两在哪里才能交换他们的数值
        *py=tmp;                    //仅仅找个数字1和2,却不知道a和b在哪里,肯定交换不了a和b的值
        cout<<"swap2函数内部打印x,y的值:"<<*px<<"\t"<<*py<<endl;
    }
    void swap3(int &x,int &y){    //引用了变量a和变量b,a代替了x,b代替了y,可以理解为,
        int tmp=x;                //程序已经知道A同学拿苹果B同学拿香蕉了,那当然就可以有效地交换水果了
        x=y;
        y=tmp;
        cout<<"swap3函数内部打印x,y的值:"<<x<<"\t"<<y<<endl;
    }
    
    
    

    运行结果:

    image.png

    图解:

    指针详解图:


    image.png

    代码图片


    image.png

    相关文章

      网友评论

          本文标题:C++中两个变量交换的三种方法,以及对指针的理解

          本文链接:https://www.haomeiwen.com/subject/vazgfctx.html