C++ 引用 (交換兩個數的值)

blank__box發表於2016-11-09


C++中引用能夠將很多問題在同級上解決,不會開闢新的空間。

在C中是沒有引用這個定義的,這也是C++中的一個特色。


通過一個swap函式來簡單的瞭解引用。


/**************************
 * 通過引用交換兩個數的值
 *(型別)&(變數名)=(所引用的變數)
 * 
 * 引用就是某一變數(目標)的一個別名,對引用的操作與對變數直接操作完全一樣。
 * 引用的宣告方法:型別識別符號 &引用名=目標變數名;
 * 【例1】:int a; int &ra=a; //定義引用ra,它是變數a的引用,即別名
 * 說明:
 * (1)&在此不是求地址運算,而是起標識作用。
 * (2)型別識別符號是指目標變數的型別。
 * (3)宣告引用時,必須同時對其進行初始化。
 * (4)引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,
 * 且不能再把該引用名作為其他變數名的別名。
 *  ra=1; 等價於 a=1;
 * (5)宣告一個引用,不是新定義了一個變數,它只表示該引用名是目標變數名的
 * 一個別名,它本身不是一種資料型別,因此
 * 引用本身不佔儲存單元,系統也不給引用分配儲存單元。故:對引用求地址,就是
 * 對目標變數求地址。&ra與&a相等。
 * (6)不能建立陣列的引用。因為陣列是一個由若干個元素所組成的集合,所以無法
 * 建立一個陣列的別名。
 **************************/


#include <iostream>

using namespace std;
void swap(int &ra,int &rb)
{
    ra^=rb;
    rb^=ra;
    ra^=rb;
}
//void swap(int *pa,int *pb)
//{
//    *pa^=*pb;
//    *pb^=*pa;
//    *pa^=*pb;
//}
void swap(char* &p, char* &q)
{
    char *t = p;
    p = q;
    q = t;
}
int main()
{
    int a=2,b=5;
    int &aa=a;//這裡的aa即為a的引用  
    int &bb=b;
    cout<<" aa = "<<aa<<" bb = "<<bb<<endl;
    swap(a,b);
    cout <<" a = " << a << " b = " << b << endl;

    char *p = "china";
    char *q = "america";
    cout <<" p = "<<p<<" q = "<<q<<endl;
    swap(p,q);
    cout <<" p = "<<p<<" q = "<<q<<endl;
    return 0;
}


對於引用的傳值

/*
 * 對於引用的表示式傳遞必須加const
 * 引用的值改編會使被引用值也發生改編
 *
 *
 */


#include <iostream>

using namespace std;

void func1(int ref)
{
    cout<<ref<<endl;
}

void func2(int &ref)//對於引用的表示式傳遞必須加const,如func3
{
    cout<<ref<<endl;
}

void func3(const int &ref)
{
    cout<<ref<<endl;
}

int main()
{
    int  a=200;
    int  b=100;
    int &aa=a;
    aa=4;     //引用的值改編會使被引用值也發生改編
    cout<<a<<endl;//這裡會得到4
    func1(a+b);
//    func2(a+b);//錯誤!
    func3(a+b);
    return 0;
}



相關文章