const int *a與int *const a,const int *const a的區別
阿新 • • 發佈:2021-08-09
關鍵問題點:const 屬於修飾符 ,關鍵是看const 修飾的位置在哪裡
1、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值。
2、int *const a
這裡const修飾的是 a ,a代表的是一個指標地址
因此不能賦給a其他的地址值,但可以修改a指向的值
這有點和cont int *a相反的意味,例子就不說了
3、至於int const *a 和 const int *a 的意義是相同的 他們兩個的作用等價
補充:
4、const int * const a
這個代表a所指向的物件的值以及它的地址本身都不能被改變
5、 const int *const a
a所指向的物件及物件的值均不可改變。
關於const的點滴補充:
1、const 物件的地址只能賦值給指向const 物件的指標
2、指向const 物件的指標可以 被賦 以 一個非const 物件的地址
3、指向const 得指標常被用作函式的形式引數,保證被傳遞給函式的實際物件在函式得實際物件在函式中不會被修改
4、常量在定義後就不能被修改,所以它必須被初始化。未初始化的常量定義將導致編譯錯誤(上面都是在說明const得問題,所以沒有賦值,實際語句中要賦值的)