面試問題-指針和引用的區別

C++有幾種複合類型,包括常見的兩種:引用和指針。spa

1.引用指針

使用術語「引用」時,指的實際上是「左值引用」。對象

引用類型引用另一種類型。作用域

int ival = 1024;變量

int &refVal = ival;                                         refVal 指向ival引用

int &refVal2;                                                  報錯:引用必須被初始化                      程序

~~~~~~~~~~~~~引用~~~~~~~~~~~~~~~~co

1.  通常初始化變量時,初始值會被拷貝到新建的對象中。術語

2. 定義引用時,程序把引用和它的初始值綁定在一塊兒,並不是將初始值拷貝到引用。                                              block

3. 初始化完成,引用將和它的初始對象一直綁定在一塊兒,進而沒法令引用從新綁定到另一個對象,所以引用必須初始化。              

4. 引用並不是對象,僅僅是爲了一個已經存在的對象起的另一個名字。

5. 定義引用後對其進行的全部操做都是在與之綁定的對象上進行的

6.  引用自己不是一個對象,因此不能定義引用的引用。

7. 引用只能綁定到對象上,不能與字面值或某個表達式的計算結果綁定在一塊兒。

~~~~~~~~~~~~~指針~~~~~~~~~~~~~~~~  

1.指針是「指向」另一種類型的複合類型。

2.指針存放某個對象的地址,獲取該地址,要使用取地址符。

    int ival = 42;

    int *p = &ival;

3.通常狀況下,指針的類型要和他指向的對象嚴格的匹配。

4.對指針解引用會獲得所指的對象,所以對解引用的結果賦值,實際上也就是給指針所指的對象賦值

   int ival = 42;

   int *p = &ival;

   cout << *p;                                    42

   *p = 0;

   cout << *p;                                     0

5.空指針

   空指針不指向任何對象,獲得空指針最直接的辦法就是用字面值nullptr來初始化指針。

6.指針和引用都能提供對其餘對象的間接訪問,在具體實現細節上有着巨大的不一樣。其中,引用自己並不是一個對象,一旦定義了引用,就沒法令其綁定到另一個對象上,以後每次使用這個引用都是訪問他最初綁定的那個對象上。

指針和它存放的地址就沒有這種限制,和其餘任何變量同樣,指針賦值就是令它存放一個新的地址,從而指向一個新的對象。

2.指針與引用有不少的不一樣點:

  1.指針自己就是一個對象,容許對指針進行賦值和拷貝,並且在指針的聲明週期內能夠前後指向幾個不一樣的對象。

  1.引用自己並非一個對象,定義引用時,將它和初始值一直綁定在一塊兒,初始化完成後,沒法令引用從新綁定到另一個對象上。

  2.指針無需在定義時賦值,和其餘內置類型同樣,在塊做用域內定義的指針若是沒有被初始化,也將擁有一個不肯定的值。

  2.引用只能綁定到對象上,它只是一個對象的別名,所以引用必須初始化。

相關文章
相關標籤/搜索