常量指標與指標常量的區別

2021-08-09 23:27:45 字數 1014 閱讀 6056

const     常量

*     指標

const int * p = int const * p  //常量指標

int * const p //指標常量

常量指標通常指向常量,不能通過指標去修改常量的值。

有時也會指向變數,eg:

int s = 10;

const int * p = &s;

但還是不能通過指標去修改指向的常量的值,可以通過 s=20,去修改這個值。

總結,常量指標就是"為了指向常量而發明的指標"

指標常量首先是乙個指標,其次這個指標型別的值是常量,宣告時要初始化,且不能改變。

但這個指標指向的值是可以改變的。

char     * a = "abcde1234";    // a是指向常量字串的字串指標變數

const     char *b = "bcde";     // b是指向常量字串的字串常量指標

char     * const c = &a;      // c是指向字串指標變數的字串指標常量

const     char *const d = &b;     // d是指向字串常量指標的指標變數

問題來了。

1)問:因為a是變數,a可以賦值為其它值,如"12345abc"。那麼c指向a,當a變化了,c指向什麼呢?

【錯誤】c是字串指標常量,c自身不能改變,但c指向的值可以變化。所以,c指向變化後的a。

【正確】a改變之前,a和c都指向"abcde1234".後來a變了,c還是存的是"abcde1234"的位址。所以c指向的未變化。

2)問:a是變數,可以改變a的內容。那麼當執行了「a[0] = 'x';」後,c會怎樣呢?

【正確】a[0]不能賦值,指向的是字串常量.

3)問:b是指向常量的指標變數,當b指向別的字串,d怎麼樣?

【正確】跟1)一樣.

4)問:b可以變化,b指向的字元不能變化,也就是說b[0]不能被重新賦值,可是b[1]可以被重新賦值嗎?

【正確】不可以.

常量指標與指標常量的區別

一 區別 區分是常量指標還是指標常量,關鍵要看const修飾的是誰。int const與const int表達的意思是一樣的。常量指標 本質是指標,並且這個指標是乙個指向常量的指標,指標指向的變數的值不可通過該指標修改。其格式為 int const p或者 const int p指標常量 本質是乙個...

常量指標與指標常量的區別

這個老是容易搞混,以前很清楚,但過一段時間不用,又忘了,因此今天整理成部落格,以備以後查詢。const char 型別的指標 指向常量的指標 其所指向的內容為常量,是不可以修改的,但其指標值是可以修改的。例如 char str hello 定義乙個字元陣列 const char pstr str 把...

指標常量與常量指標的區別

指標常量是乙個常量,常量不可修改,而指標常量就是這個指標不可被修改 比如陣列名就是乙個指標常量 int a 2 int b 2 a b 報錯,陣列名是乙個指標常量,該指標不能被修改,賦值 a 2 不報錯,a代表a指標所指向的內容,該內容不是常量,可被修改常量指標是乙個指標,該指標指向乙個常量,指向的...