c++的引用與指針的關係詳解

[TOC]
#1.引用的概念及用法
概念:引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣。
     溫馨提示:引用不是定義一個新的變量
定義的格式爲:
    類型 &引用變量名 = 已定義過的變量名;
用法:
舉個例子:

 int a = 5;
 int& b = a;

這就是引用,b引用a,b是a的別名。

#2.引用做參數
我們在C語言中經常用指針做參數:

Func(int *a) ;
int main()
{
    int arr[1000];
    Func(arr);
}

像這種情況我們會用指針作爲參數,增加程序運行效率。*當然指針由於太靈活,會導致不安全在裏面,故此C++引入了引用類型,他的效果和指針一樣其實引用底層就是指針,下面會介紹。
引用作爲參數:**

Func(int& a) ;
int main()
{
    int arr[1000];
    Func(arr);
}

引用作爲參數很好的規避了指針的風險,同時能達到指針的效果。

當不希望函數內改變參數x的值時,儘量使用常引用傳參.

void ReadBigData (const bigData& x)//此時不需要在函數內部改變參數的值我們賦予參數常屬性
{
int a = x. array[100];
}

#3.引用做返回值
以引用返回函數值,定義函數時需要在函數名前加&

int ret = 0;//全局變量
int Add1(int a, int b)
{
    ret = a + b;
    return ret;
}

int& Add2(int a, int b)//引用做返回值
{
    ret = a + b;
    return ret;
}

int main( )
{
    printf("%d\n", Add1(5,6));
    printf("%d\n", Add2(4,5));
    return 0;
}

引用做返回值優點:
用引用返回一個函數值的最大好處是,在內存中不產生被返回值的副本。

#4.彙編層看引用的特性
這裏寫圖片描述

結論:

  1. 不要返回一個臨時變量的引用。

  2. 如果返回對象出了當前函數的作用域依舊存在,則最好使用引用返回,因爲這樣更高效。

#5.引用和指針的區別和聯繫:
▶不同點:

  1. 指針是一個實體,而引用僅是個別名;

    1. 引用使用時無需解引用(*),指針需要解引用;

    2. 引用只能在定義時被初始化一次,之後不可變;指針可變;

    3. 引用沒有 const,指針有 const;const修飾的指針不可變;

    4. 引用不能爲空,指針可以爲空;

    5. “sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的地址)的大小;
  2. 指針和引用的自增(++)運算意義不一樣;

    8.從內存分配上看:程序爲指針變量分配內存區域,而引用不需要分配內存區域。

▶相同點:兩者都是地址的概念,指針指向一塊兒內存,其內容爲所指內存的地址;引用是某塊兒內存的別名。

數據結構專欄地址:https://blog.csdn.net/column/details/20027.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章