http://blog.csdn.net/zhangheng837964767/article/details/33783511函數
關鍵問題點:const 屬於修飾符 ,關鍵是看const 修飾的位置在那裏
一、const int *a
這裏const 修飾的是int,而int定義的是一個整值
所以*a 所指向的對象 值 不能經過 *a 來修改,可是 能夠從新給 a 來賦值,使其指向不一樣的對象
eg:
const int *a = 0;
const int b = 1;
int c = 1;
a = &b //ok! 額外:注意不能經過a 來修改 b值
a = &c //ok! 額外:雖然c自己不是一個常量
*a = 2 //erro! 爲題就在這裏,不能修改經過 *a 所指向的對象值,最後賦值得對象是c,所以不能經過*a 來修改c值。
二、int *const a
這裏const修飾的是 a ,a表明的是一個指針地址
所以不能賦給a其餘的地址值,但能夠修改a指向的值
這有點和cont int *a相反的意味,例子就不說了
三、至於int const *a 和 const int *a 的意義是相同的 他們兩個的做用等價
補充:
四、const int * const a
這個表明a所指向的對象的值以及它的地址自己都不能被改變spa
五、 const int *const a.net
a所指向的對象及對象的值均不可改變。指針
關於const的點滴補充:
一、const 對象的地址只能賦值給指向const 對象的指針
二、指向const 對象的指針能夠 被賦 以 一個非const 對象的地址
三、指向const 得指針常被用做函數的形式參數,保證被傳遞給函數的實際對象在函數得實際對象在函數中不會被修改
四、常量在定義後就不能被修改,因此它必須被初始化。未初始化的常量定義將致使編譯錯誤(上面都是在說明const得問題,因此沒有賦值,實際語句中要賦值的)對象
一、若是const位於星號的左側,則const就是用來修飾指針所指向的變量,即指針指向爲常量;若是const位於星號的右側,const就是修飾指針自己,即指針自己是常量。
二、所以,const int *a;和 int const *a;的狀況相同,都是指針所指向的內容爲常量(const放在變量聲明符的位置無關),這種狀況下不容許對內容進行更改操做,如不能*a = 3 ; ,int *const a;爲指針自己是常量,而指針所指向的內容不是常量,這種狀況下不能對指針自己進行更改操做,如a++是錯誤的。
三、const int* const a;爲指針自己和指向的內容均爲常量。