C 引用 指標與const

2021-07-28 02:26:45 字數 1654 閱讀 7562

引用即繫結到另乙個物件上,因此定義了乙個引用,對其操作即是對與之繫結的物件進行操作(如為引用賦值,獲取引用的值,以引用作為初始值...)。

與引用類似,實現對物件的間接訪問。

指標和引用的本質區別:

引用不是物件,指標本身即是物件。

指標和引用的共同:

都需要型別和物件型別嚴格匹配(不支援型別轉換),並且指標只能指向變數/物件,不能指向字面值或者表示式。同時,也都對常量指標和常量引用出現例外情況,即這兩種情況下可以使用一般的初始化。

指標值(前三種有效):

注意:1、試圖拷貝或者以其他形式訪問乙個無效指標將引發錯誤,訪問無效指標的後果無法預計,並且編譯器不檢查此類錯誤,在設計程式時,必須清楚所有指標的有效性;

2、第2和3種指標雖然有效,但並不指向任何具體物件,因此訪問此類指標的物件也不允許。

因此:建議初始化所有指標,並且盡量在定義了物件之後,再定義物件的指標。如若不清楚指標的指向,可以暫時初始化為nullptr或0 ,此時編譯器即可以知道所有指標的指向。

指標作為條件判斷:

前提:指標有效。

如if(p)...      空指標,條件為0;其他有效指標,條件為1 。

如if(*p)...     表示指標指向的物件作為條件判斷。

const只是個限定符,限定了不能改變其值,此限定只在要改變const變數的值時才起作用。

定義並初始化乙個const變數,則編譯器會在整個檔案中將所有用到const物件替換成其初始值。

const int ci=2017;

const int &ri=ci;

引用中的一種例外:

注釋:對常量的引用可以普通初始化,可以繫結非常量,但常量物件必須用對常量的引用繫結(但常量物件可以賦值給常量或變數物件)。

指標中的一種例外:

注釋:指向常量的指標 可以指向非常量(普通初始化

),但要存放常量的位址必須使用 指向常量的指標。

指標和引用對於const的區別:常量指標(也是普通型別限定)

(1)指標是物件,引用不是物件,因此允許把指標定義為常量,即常量指標。

變數位址儲存為常量指標  int errnumb=0;  int *const curerr=&errnumb;

常量位址儲存為指向常量的常量指標 const double pi=3.14;  const double *const pip =π

(2)引用和指標操作不同,引用相當於繫結物件的別名(對物件的直接訪問),指標是存放物件的位址(解引用,為間接訪問)。

注釋:對const的引用和指向常量的指標都是對引用和指標的限定,不能通過引用或指標方式改變物件的值。

而常量指標,const限定的是變數型別,和前邊的const限定符一樣,即不能改變變數的值,在常量指標下,即是不能改變指標的指向。

實際上是對 非常量引用、非常量指標、普通型別限定(包括常量指標)、對const的引用、指向const的指標 初始化和賦值的總結。

但是對於引用和指標的使用,不通過繫結或指標改變物件的值,因此可以進行普通賦值和解引用操作 或 其他改變物件值的操作。(如 const int & ci=i1;  int i2=ci; 此處是使用引用操作,而不是繫結常量物件)

物件拷貝操作時,頂層和底層const區別比較大:

const, 引用與指標

const int bufsize 512 對const的引用 簡稱為 常量引用 const int ci 1024 常量 const int r1 ci 對常量的引用 常量引用,不允許通過r1修改ci不能通過引用來改變它所繫結的值 double dval 3.14 const double rd ...

const與指標 引用

定義乙個指標 p const int p null intconst p null int const p null 上面兩行定義完全等價,第三行則不同。下面兩行定義也完全等價 const int const p null intconst const p null 舉例說明 int x 3 con...

const 引用與指標

希望這是最後一次修頂這篇essay了,之前寫的兩次都有些小毛病。打臉,又來更新了。ps 右值指的是字面常量和表示式求值過程中建立的臨時變數。我們忽略掉了相同型別是否可以賦值的情況 我到現在的學習裡都還可以相互賦值 以及型別相容的情況。只考慮const 等修飾符帶來的影響 型別相容 const 底層c...