頂層const 底層const

2021-07-02 07:54:02 字數 1065 閱讀 4936

頂層const(top-level const)表示指標(或引用等)本身是個常量。底層const(low-level const)表示指標指的物件是乙個常量。

一般當說到頂層或底層const的時候都是指標或者引用型別的,因為普通型別的const只能是底層的。

例如:

const int i = 0;//i 表示是乙個常量整型,i是不能夠改變的,因此它是乙個頂層const

int j =1;

int *const p1 = &j;//表示指標p1本身是不可以改變的,這是乙個頂層const,表示p1將就永遠指向j

const int *p2 = &i;//表示p2指向的是乙個常量整型,而p2本身是可以改變的,這是乙個底層const

const int *p2 = &j;//也是正確的,p2只是自覺地不會改變它指向的值,這只是它的一相情願罷了

int *p3 = &i;//錯誤,因為通過指標p3可能會改變i的值,而i是不可以被改變的
其實頂層還是底層只是個名詞,你完全不需要記住,但是你要知道它們的區別並會用,例如在函式的形參和實參的使用:

void f(const int i);//宣告乙個函式

int j =0;

f(j);//呼叫函式f,傳入實參j,這是合法的,因為void f(const int i)表示在f函式中不能改變i的值,因此對實參沒什麼特殊要求,只傳進去值就可以了,這樣i得到這個 //值後就可以在函式中進行一系列的操作了

void f(const int *i)//宣告乙個形參是指向常量整型的指標的函式,表示(*i)的值在函式內不會改變

const int j = 0;

f(&i)//合法的

f(&j)//合法的

void f(int *i)//宣告函式,形參是乙個指向整型的指標

f(&j)//不合法,因為在函式內可能會改變指標i所指向的變數的值,而j是不允許被改變的。

因此我們知道,

當我們在函式內不需要改變傳入的變數的值的時候,盡量使用const

,這樣對實參的限制更少一點。

頂層const 底層const

頂層const 底層const 個人理解 頂層cosnt 就是不影響變數型別,作為修飾符的存在。底層則會影響到變數型別 例如 int pi 這是乙個int 型別的變數,乙個指向int型的指標。int const p1 這還是乙個int 型別的變數 首先p1是乙個指標型別,指向的是int型別的值。才不...

頂層const和底層const

頂層const 本身是乙個常量 底層const 所指的物件是乙個常量 int const p1 i const修飾p1,p1本身是乙個const,所以這個const是頂層const const int ci 42 const修飾ci,ci本身是乙個const,頂層 const int p2 ci c...

頂層const與底層const

是否可修改所指向的物件 是否可通過指標修改物件的值 頂層const 指標本身是常量。否 是 底層const 指標所指的物件是常量。是 否 int a 0 const int b 1 const int p1 a 底層const p1指向a int const p1與const int p1等效 p1...