const int *a與int *const a,const int *const a的區別


關鍵問題點: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得問題,所以沒有賦值,實際語句中要賦值的)

 

  1、如果const位於星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;如果const位於星號的右側,const就是修飾指針本身,即指針本身是常量
  2、因此,const int *a;和 int const *a;的情況相同,都是指針所指向的內容為常量(const放在變量聲明符的位置無關),這種情況下不允許對內容進行更改操作,如不能*a = 3 ; ,int *const a;為指針本身是常量,而指針所指向的內容不是常量,這種情況下不能對指針本身進行更改操作,如a++是錯誤的。
  3、const int* const a;為指針本身和指向的內容均為常量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM