const char *p,char *const p和const char *const p的區別

const是一個C語言的關鍵字,它限定一個變量不容許被改變,知道這個就能讀懂這篇博客。ios

要理解他們的用法必定不要從左往右理解,要從指針符號*處分割理解,能夠在*左邊加個<-符號輔助理解,<-符號無實意。程序員

1.好比const char *p就能夠當作const char <- *p,意思是一個指針p指向一個const char常字符類型數據的地址,p是可指向其餘地址的,而被指向的值是個不能改變的常量。spa

 

  1. #include <iostream>  
  2. int main()  
  3. {  
  4.     const char a = 'a';  
  5.     const char b = 'b';  
  6.     char c = 'c';  
  7.     const char *p = &a;  
  8.     p = &b;//正確,p由a的地址指向了b的地址  
  9.     //p = &c;//錯誤,p指向的是const char類型,不是char類型。  
  10.     //a = 'b';//錯誤,由於a是const類型。綜上所述p是可指向其餘地址的,而被指向的值是常量。      
  11. }  



不少人把char const *p 和 const char *p混淆就是從左往右理解形成的,其實這兩句話意思是同樣的,只是不一樣的程序員有不一樣的習慣,意思都是一個指針p指向一個const char常字符類型數據。.net

2.char *const p能夠當作char <- *const p,意思是一個常指針p指向char類型數據的地址,既然是常指針,那麼p就不可指向其餘地址,而被指向的值可改變,由於被指向的是char類型數據,固然是可改變的。指針

 

  1. #include <iostream>  
  2. int main()  
  3. {  
  4.     char a = 'a';  
  5.     char b = 'b';  
  6.     const char c = 'c';  
  7.       
  8.     //char *const p = &c;//錯誤,p指向char類型數據  
  9.       
  10.     char *const p = &a;//正確  
  11.     //p = &b;//錯誤,p是常指針,不能改變p指向的地址。  
  12.   
  13.     a = 'b';//正確,此時*p的值也是'b'  
  14. }  

3.const char *const p一個常指針指向一個常量。結合上面兩點,常指針,不能改變p指向的地址值(即p = &a;又p = &b;),常量,不能改變p指向地址值的值(即p = &a;又 a = 'b';)。沒有代碼,本身理解,理解了就能夠關了,沒理解就從新循環再看看上面兩點吧。blog

相關文章
相關標籤/搜索