c++之引用,指針 ;

引用 : 就是爲對象起了另一個名字;例 : int i = 42;    int &a = i;這裏 a是i的另一個名字;

定義引用時,程序把引用和它的初始值綁定在一起,而不是將初始值拷貝給引用;

因爲無法令引用重新綁定到另外一個對象,因此引用必須初始化;

 

引用並非對象,只是爲一個已經存在的對象起的另外一個名字;引用只能綁定到對象上,而不能與字面值或某個表達式的計算結果綁定在一起;

 

指針 : 變量名前一定要有 * ; 獲取地址 ,使用& ;

 指針的類型 要與所指向對象的類型一致 ;

指針值 : 應屬於下列4中狀態 之一 :

    1 , 指向一個對象;

    2, 指向緊鄰對象所佔空間的下一個位置 ;

    3 , 空指針 ,意味着指針沒有指向任何對象 ;

    4, 無效指針 , 就是上述情況之外的其他值 .

 試圖拷貝或以其他方式訪問無效指針的值都將引發錯誤 ,編譯器不檢查此類錯誤 ;

利用 解引用符(*) 訪問對象  ;

 

空指針 ;不指向任何對象 ;使用指針之前先檢查它是否爲空 ;

生成空指針的方法 :

 int *p = nullptr;  //等價於 int * p = 0;

int   *p1=0;         //直接將p1初始化爲字面值常量0;

int *p2 = NULL ;//等價於 int *p2=0;  需要引入 #include cstdlib;

建議初始化所有指針 ;在可能的情況下 ,儘量等定義了對象之後再定義指向它的指針 ;

 

對於兩個類型相同的合法指針,可以 用(==) 或 (!=)來比較,結果爲bool類型 ;如果兩個指針存放的地址值相同,爲true ;

兩個指針存放地址值相同 的3中情況 :

 1, 都爲空 ;

  2 ,指向同一個對象 ;

  3, 都指向了同一個對象的下一地址 ;

void*是以一種特殊的指針類型,可存放任意對象的地址 ;因爲不知道這個對象是什麼類型,無法確定在這個對象上做哪些操作,所以不能直接操作void*指針所指的對象 ;

 

引用不是對象,沒有實際地址,所以不能定義指向引用的指針 ;

指針,引用 共同點 : 實現了對其他對象的間接訪問 ;

指針 與引用的區別 :

 1,指針本身就是對象,允許對指針賦值和拷貝,而且在指針的生命週期內可以先後指向幾個不同的對象;

 2, 指針無須在定義時賦初值;


指向指針的指針 :

int value = 12; //int 型變量

int *p = &value; // 定義指針p ,值爲value的地址

int **p1 = &p; //定義指針p1, 值爲p的地址;

int *p2 = p;  //定義指針p2,值爲p存儲的值; 


const限定符 :相當於java中的final ;

const對象一旦創建就不能再改變 ,所以必須初始化;初始值可以使任意複雜的表達式 ;

與非const類型所參與的操作相比 ,主要的區別在於只能在const類型的對象上執行不改變其內容的操作 ;

默認情況下 ,const對象僅在文件內有效 ; 解決辦法 : 對const變量,無論是聲明還是定義,都添加extern關鍵字 ;這樣只需要定義一次就可以在其他文件訪問了;

 

引用的類型必須與其引用對象的類型一致 ,例外情況之一 :

 在初始化常量引用時,允許用任意表達式作爲初始值,只要該表達式的結果能轉成引用的類型即可;尤其允許一個常量引用綁定非常量的對象,字面值,甚至是一般表達式 ;

          例  :  int i = 42;

                  const int &r = i ;//允許const int &綁定到一個普通int對象上;

                  const int &r1 =42; //r1是一個常量引用 ;

                  const int &r2 = r*2;//

                    int & j = r * 2;         / /錯誤 :j是一個普通非常量引用 ;

 指針和const :

  指向常量的指針 : 不能用指針改變所指對象的值 ; 存放常量對象的地址,只能使用常量指針;

指針類型必須與所指對象類型一致 例外之一 :

允許一個指向常量的指針指向一個非常量對象 ;

例 : const double i = 3.14;

      const double *p  = &i;

         *p = 2;  //錯誤 ,在這裏不能使用指針修改對象的值;

       double d = 3.245;

         p = &d  ; //正確 ;這是例外情況之一;

 

常量 指針 : 使用const可以修飾任意對象,包括指針;

                  必須初始化 ,初始化完成,它的值(存放在指針中的地址)就不能再修改了.不變的是指針本身的地址值而不是地址所指的值 ;

 

 

 

 

 

 

 

 

 

發佈了63 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章