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指標所指向的內容,該內容不是常量,可被修改常量指標是乙個指標,該指標指向乙個常量,指向的...