1. 程式人生 > >c++的引用與指標的關係

c++的引用與指標的關係

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.從記憶體分配上看:程式為指標變數分配記憶體區域,而引用不需要分配記憶體區域。

▶相同點:兩者都是地址的概念,指標指向一塊兒記憶體,其內容為所指記憶體的地址;引用是某塊兒記憶體的別名。

相關推薦

C++引用指標關係

(1)引用總是指向一個物件,沒有所謂的 null reference .所有當有可能指向一個物件也由可能不指向物件則必須使用 指標.  由於C++ 要求 reference 總是指向一個物件所以 reference要求有初值.  String & rs = stri

c++引用指標的區別

 ★ 相同點:     1. 都是地址的概念;     指標指向一塊記憶體,它的內容是所指記憶體的地址;引用是某塊記憶體的別名。     ★ 區別:     1. 指標是一個實體,而引用僅是個別名;     2. 引用使用時無需解引用(*),指標需要解引用;   

c++引用指標的區別(著重理解)

 ★ 相同點:     1. 都是地址的概念;     指標指向一塊記憶體,它的內容是所指記憶體的地址;引用是某塊記憶體的別名。     ★ 區別:     1. 指標是一個實體,而引用僅是個別名;     2. 引用使用時無需解引用(*),指標需要解引用;     3.

c++的引用指標關係

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

C++】C++中的引用指標

想必大家對C++中的指標都有所瞭解,但是什麼是引用呢?C++11標準引入了“引用”的新功能。 引用 引用(reference):給物件起了另外一個名字,引用型別引用(refers to)另外一種型別,通過將宣告符寫成&d的形式來定義引用型別,其中d是宣告的變數名: int val = 10

引用指標區別

區別: 引用不能為空,當引用被建立時,它必須被初始化;指標可以為空值,可以在任何時候被初始化 一旦一個引用被初始化為指向一個物件,它就不能改變為另一個物件的引用。指標則可以在任何時候指向另一個物件 不可能有NULL引用,必須確保引用是和一塊的合法的儲存單元關聯

C++ 引用常量

一、引用    1.   引用格式           a.型別名  &   變數名 =另一個變數           b.試

函式返回指標引用指標區別

1,函式不可以返回棧記憶體的指標,但是可以返回堆記憶體的指標,可以free掉兩次指向空的指標,但是不能連續free兩次指向記憶體的指標,會產生已放棄   int main() { int *a; a = (int *)malloc(10); a[0] = 1

C++陣列指標

一、一維陣列 1.1宣告並初始化一維陣列 type 陣列名[整型常量表達式]={陣列元素} 宣告時可以不指明陣列長度,編譯器將根據初始化列表的長度作為陣列長度 若初始化列表的初始值數少於元素數目,則其餘元素均初始化為0 1.2使用一維陣列 陣列名[下標],從0開始,

c語言指標——(二)指標變數的定義賦值

        由上一節,我們知道了,指標就是地址,而變數的指標就是變數的地址,存放變數地址的變數就是指標變數。指標變數可以指向另一個變數,在程式中使用" * "來表示這種指向關係。 1.指標變數的定義         指標的定義依然遵循先定義後使用的原則,在使用前必須先定

2017033001c++引用指標的區別(著重理解)

★相同點:    1. 都是地址的概念; 指標指向一塊記憶體,它的內容是所指記憶體的地址;引用是某塊記憶體的別名。 ★區別:    1. 指標是一個實體,而引用僅是個別名;    2. 引用使用時無需解引用(*),指標需要解引用;    3. 引用只能在定義時被初始化一次,

Linux C----陣列指標

1、陣列陣列:陣列是一種複合資料型別,它由一系列形同型別的元素組成。例:定義一個由5個int型元素組成的陣列 count:int count [5]. 注意:1、對於同一陣列,其元素的資料型別是相同的。           2、陣列名書寫規則應符合識別符號書寫規則。     

C++引用引用作為函式的引數

本篇博文轉載於 http://blog.csdn.net/chaipp0607/article/details/60151813 對一個數據建立一個“引用”,他的作用是為一個變數起一個別名。這是C++對C語言的一個重要補充。 如何建立一個引用 int a = 5;

C++ const指標的結合

區別方法: 如果const位於*的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量; 如果const位於*的右側,const就是修飾指標本身,即指標本身是常量。 換句話說,如果con

C++ 引用引用作為函式的引數

對一個數據建立一個“引用”,他的作用是為一個變數起一個別名。這是C++對C語言的一個重要補充。 如何建立一個引用 int a = 5; int &b = a; cout<<a<<endl;

C++引用複製建構函式

引用 ◆ 1、什麼是引用? 引用又稱別名(alias),是一種非常特殊的資料型別。它不是定義一個新的變數,而是給一個已經定義的變數重新起一個別名,也就是C++系統不為引用型別變數分配記憶體空間。引用主要用於函式之間的資料傳遞。 引用定義的格式為:     型別 &引

VC 學習之三,引用指標

從概念上講。指標從本質上講就是存放變數地址的一個變數,在邏輯上是獨立的,它可以被改變,包括其所指向的地址的改變和其指向的地址中所存放的資料的改變。 而引用是一個別名,它在邏輯上不是獨立的,它的存在具有依附性,所以引用必須在一開始就被初始化,而且其引用的物件在其整個生命週期中

c++---引用指標

引用: 引用不是定義一個變數,而是給一個已經定義好的變數重新起一個名字 型別&引用變數名=已定義過的變數名 特點: 1 一個變數可以取多個別名 2 引用必須初始化 3 引用只能在初始化的時候引用一次,不能改變為引用其他的變數

C++中const引用指標之間的關係要點

一、const關鍵字 1、有時我們希望定義這樣的一個變數,它的值不能被改變。這時就可以在定義變數時加上const關鍵字。例如 const int bufSize=512; const型別變數可以進行大部分與非const型別變數相同操作,主要的限制就是不可以在const型別的物件上執

c++ primer plus書之--c++函式, 陣列引數指標關係2

陣列怎麼在函式的引數中進行傳遞: // simple function #include "iostream" using namespace std; const int Size = 8; // 函式原型, 可以不寫變數名, 變數名也可以與函式定義的變數名不同 int sum_arr(in