Primer c++ 第5版【筆記】- 複合類型(引用、指針)

什麼是對象 ?

區分是不是對象,看有沒有實際地址。

eg:引用綁定對象,無實際地址,不是對象;指針存放對象的地址,有實際地址,是對象。

一般說法

引用/指針的值說的是指向了什麼對象, 引用/指針所指向對象的值說的是對象的值。

引用

  1. 引用只是對象的別名,引用≠對象;
  2. 引用只能綁定對象,不能綁定字面值,但是可以賦值字面值;
  3. 引用只能綁定一個對象,永遠指向初始化的對象,因此必須初始化
  4. 引用的聲明寫法是:&引用
引用賦值規則:
  1. 引用賦值給引用,不改變引用的指向,但改變所綁定的對象的值;
  2. 引用賦值給變量,將引用所指向對象的內容賦給變量;
  3. 變量賦值給引用,第一次賦值是對引用指向的初始化,非第一次賦值是改變引用所指向對象的值;
  4. 變量賦值給變量,沒什麼好說的。
int i = 0, &r1 = i; double d = 0, &r2 = d;
/* 
(a) r2 = 3.14159;   正確,字面值3.14159可以賦給引用(r2)綁定的double類型變量d
(b) r2 = r1;   正確,引用賦值規則1
(c) i = r2;  正確,引用賦值規則2
(d) r1 = d; 正確,引用賦值規則3
*/

指針

  1. 指針是一個對象,因此存在指向指針的指針;
  2. 無須初始化(不初始化容易出錯);
  3. 指針存放某個對象的地址,要用取地址符&進行賦值,不是直接綁定對象;
  4. 在生命週期內,可以指向不同的對象
  5. 指針的類型和對象的類型必須嚴格匹配
  6. *指針有兩個含義:① 聲明指針 ,② * 爲解引用符,訪問指針所指向的對象。
    在這裏插入圖片描述
指針賦值規則

對指針進行賦值只能使用以下四種類型的值:(1)空指針;(2)類型匹配的對象的地址;(3)當前指向對象的下一地址;(4)同類型的另一個有效指針。

3種生成空指針的方法:

在這裏插入圖片描述
儘量使用nullptr

3種指針的值相等的條件
  1. 空指針
  2. 指向同一個對象
  3. 指向同一個對象的下一個地址
特殊指針類型 void*
  1. 無數據類型,任何類型的指針(包括void*)都可以直接賦值給void*而無需強制類型轉換;
  2. 不能直接訪問void*所指向的對象,必須先轉換爲確定的類型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章