C++ 引用(別名)

C++中的引用

引用變量是一個別名,也就是說,它是某個已存在變量的另外一個名字。一旦把引用初始化爲某個變量,就可使用該引用名稱或變量名稱來指向變量。ios

引用引入了對象的一個同義詞。定義引用的表示方法與定義指針類似,只是用&代替了*。引用(reference)是c++對c語言的重要擴充。引用就是某c++

一變量(目標)的一個別名,對引用的操做與對變量直接操做徹底同樣。其格式爲:類型 &引用變量名 = 已定義過的變量名。函數

引用的特色:spa

  ①一個變量可取多個別名。指針

  ②引用必須初始化,只有別名是不能成立的。code

  ③引用只能在初始化的時候引用一次 ,不能更改成轉而引用其餘變量。對象

C++ 引用 vs 指針

引用很容易與指針混淆,它們之間有三個主要的不一樣: blog

  • 不存在空引用。引用必須鏈接到一塊合法的內存。
  • 一旦引用被初始化爲一個對象,就不能被指向到另外一個對象。指針能夠在任什麼時候候指向到另外一個對象。
  • 引用必須在建立時被初始化。指針能夠在任什麼時候間被初始化

一、基礎數據類型引用:

#include <iostream>
#include <stdio.h>
using namespace std;

int main(void)
{
    int a=10;
    int &b=a;    // 給a起一個別名b
    
    b=20;        // 對b操做和對a操做效果是同樣的
    cout << a <<endl;

    a=30;
    cout << b << endl;

    system("pause");
    return 0;
} 

 運行結果:20   30內存

二、結構體類型的引用

#include <iostream>
#include <stdio.h>
using namespace std;

typedef struct // 定義一個結構體
{
    int x;
    int y;
}Coord; // 結構體的名字

int main(void)
{
    Coord c;
    Coord &c1 = c; // 給c起一個別名c1

    c1.x = 10;   // 對c1操做至關於對c操做
    c1.y = 20;

    cout << c.x << "," << c.y << endl;

    system("pause");
    return 0;
}

運行結果:it

三、指針類型的引用:

格式:類型  *&指針引用名 = 指針簡而言之:給地址起一個別名

#include <iostream>
#include <stdio.h>
using namespace std;

int main(void)
{
    int  a = 3;
    int *p = &a;
    int *&q = p;

    cout << p << endl;  //  P = 0093FC60
    cout << &q << endl; // &q = 0093FC54
    cout << *&q << endl;//*&q = 0093FC60

    *q = 5;
    cout << a << endl;

    system("pause");
    return 0;
}

運行結果:

四、函數參數引用:

之前咱們在C語言中交換a,b的位置時:

void fun(int *a,int *b)
{
    int c;
    c  = *a;
    *a = *b;
    *b = c;
}

調用的時候咱們須要吧參數的地址傳進去:

int x =10,y = 20;
fun(&x,&y);

而當咱們引入了引用,事情就方便多了

void fun(int &a,int &b) // 形參就是引用別名
{
    int c = 0;
    c = a;
    a = b; // a和b都是以別名形式進行交換
    b = c;
}

調用傳參

int x =10,y = 20;
fun(x,y);

代碼示例:

#include <iostream>
#include <stdio.h>
using namespace std;

void fun(int &a,int &b)

int main(void)
{
    int x =10;
    int y =20;
    cout << x << "," << y << endl;

    fun(x,y);
    cout << x << "," << y << endl;

    system("pause");
    return 0;
}

void fun(int &a,int &b)
{
    int c = 0;
    c = a;
    a = b;
    b = c;
}

輸出結果:

相關文章
相關標籤/搜索