C++中關於引用與指針

引用的聲明: 數據類型 & 引用名 = 初始值(初始值爲變量名)
C++中引用就是起別名的意思,聲明一個引用並非定義一個新的變量。編譯器會給他分配內存空間,所以引用自己佔據內存空間,可是引用表現給用戶看到的並非引用自身的地址。
//以下程序函數

int ee = 100;
int ff = 200;
int &aa = ee;
int &bb = ff;
cout << "ee地址" << &ee << "  ee值" << ee << endl;
cout << "ff地址" << &ff << "  ff值" << ff << endl;
cout << "aa地址" << &aa << "  aa值" << aa << endl;
cout << "bb地址" << &bb << "  bb值" << bb << endl;

clipboard.png

從中能夠看到,引用的地址跟變量是同樣,可是在真實內存中,引用與變量是分開存放的,對引用的操做有點相似與指針,但又不徹底同樣。
當引用做爲函數的參數時,有以下特色:
一、在進行實參和形參結合時,不會爲形參分配內存空間,而是將形參做爲實參的一個別名。使用引用傳遞函數參數時,內存中並無產生實參的副本,他是直接對實參進行操做(相似指針);而使用通常變量傳遞函數參數時,當發生函數調用時,須要給形參分配存儲單元,形參變量是實參變量的副本。所以,當參數傳遞的數據較大時,用引用比用通常變量傳遞參數的效率高,且佔用空間小。
二、用引用能達到指針傳遞同樣的效果,函數內對形參的操做至關與直接對實參的操做;
//引用做爲形參spa

void swap(int & a, int &b)
{
    int map = a;
    a = b;
    b = map;
    cout << "a地址" << &a << "  a值" << a << endl;
    cout << "b地址" << &b << "  b值" << b << endl;
}
int main(void)
{
    int ee = 100;
    int ff = 200;
    cout << "ee地址" << &ee << "  ee值" << ee << endl;
    cout << "ff地址" << &ff << "  ff值" << ff << endl;
    swap(ee, ff);
    cout << "ee地址" << &ee << "  ee值" << ee << endl;
    cout << "ff地址" << &ff << "  ff值" << ff << endl;
    return 0;
}

clipboard.png

//對比指針指針

void swap(int * a, int *b)
{
    int map = *a;
    *a = *b;
    *b = map;
    cout << "a地址" << &a << "  a值" << a << endl;
    cout << "b地址" << &b << "  b值" << b << endl;
}
int main(void)
{
    int ee = 100;
    int ff = 200;
    cout << "ee地址" << &ee << "  ee值" << ee << endl;
    cout << "ff地址" << &ff << "  ff值" << ff << endl;
    swap(&ee,&ff);
    cout << "ee地址" << &ee << "  ee值" << ee << endl;
    cout << "ff地址" << &ff << "  ff值" << ff << endl;
    return 0;
}

clipboard.png

從中能夠看出指針和引用的類似與區別。
//函數參數爲通常變量;code

void swap(int a, int b)
{
    int map = a;
    a = b;
    b = map;
    cout << "a地址" << &a << "  a值" << a << endl;
    cout << "b地址" << &b << "  b值" << b << endl;
}
int main(void)
{
    int ee = 100;
    int ff = 200;
    cout << "ee地址" << &ee << "  ee值" << ee << endl;
    cout << "ff地址" << &ff << "  ff值" << ff << endl;
    swap(ee,ff);
    cout << "ee地址" << &ee << "  ee值" << ee << endl;
    cout << "ff地址" << &ff << "  ff值" << ff << endl;
    return 0;
}

clipboard.png

經過對比能夠發現利用指針和引用的優點。
引用一樣能夠運用在函數返回
//函數返回引用類型blog

int& fun(int & num)
{
    return num;
}
int main(void)
{
    int aa, bb;
    aa = fun(bb);
    cout << aa << "  " << bb << endl;
    return 0;
}

//函數返回指針類型ip

int* fun(int * num)
    {
        return num;
    }
    int main(void)
    {
        int aa, bb;
        aa = *fun(&bb);
        cout << aa << "  " << bb << endl;
        return 0;
    }

----------------------結束語---------------------------內存

因此之後寫程序優先考慮用引用,其次是指針,最後通常變量。
相關文章
相關標籤/搜索