C 中頂層const和底層const

2021-09-24 17:31:57 字數 945 閱讀 1616

頂層const表示指標本身是個常量,底層const表示指標所指的物件是乙個常量。

int i=0;

int * const p1=&i; 不能改變p的值,p是乙個指標,所以p是乙個頂層const

const int * p2=&i; 表示不能改變指標所指i的值,所以是乙個底層const

const的頂層和底層不只是限定於指標,進行推廣後。

頂層const可以表示任意的物件是常量,這對任意資料型別都適用,如算術型別、類、指標等。

底層const則表示與指標和引用等復合型別的基本型別部分有關。

其中與引用有關的const都是底層const

const int num=0;這就是乙個頂層const

auto e=# 這裡的e是乙個指向整形常量的指標,因為對於物件取位址是乙個底層const,所以auto會保留。

其中指標型別比較特殊,它既可以是底層const也可以是頂層const。

cosnt int*const p3=&i; 靠右的const是指指標本身,所以是頂層const;靠左的const是指指標所指向的資料型別,所以是底層

const。

因為引用的值就是其所指物件的值,引用在其生命週期中的值不會進行改變,所以引用的const都是底層const。

int const&a=i;

i和a都不能進行改變。

const int &b=i;

i可以改變,從而改變b的值,因為i本身不是乙個常量,只是引用認為他是常量。

所以const的頂層和底層的判斷主要是看其const是限定的其物件本身,還是限制其所指的物件。

非const變數可以賦值給const變數,但是const變數不可以賦值給非const變數。

非常量可以將位址賦值給const指標,但是常量不可以將位址賦值給非const指標。

引用必須初始化,因為引用一旦初始化不能繫結其它物件。

C 中頂層const和底層const

指標本身是乙個物件,由於,指標實際相應著記憶體單元的一段儲存空間,然而,指標所指向的也是乙個資料物件,因此,指標是乙個常量與指標所指向的是乙個常量是兩個全然不同的概念,頂層 const 表示的是 指標本身是乙個常量,底層 const 表示的是 指標所指的物件是乙個常量,更普通情況下,頂層 const...

C 頂層const和底層const

當我們定義指標和變數的時候,有時候希望定義成const型,就是不希望程式中改變自己定義的變數,一旦有 試圖改變定義好的const型的變數,在編譯的時候就會直接報錯。指標本身也是乙個變數物件,指標所指的變數也是乙個變數物件。當定義const int p i的時候是指標不可變還是變數i不可變呢?這就涉及...

C 頂層const和底層const

頂層const表示物件本身是乙個常量 底層const表示不能通過指標或引用改變所指向的物件 例如const int a 42 頂層const,不能改變a的值,int只能有頂層const 指標 int b 12 const int b1 b 底層const,不能通過b1改變a的值,可以理解為b1指向c...