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

相关文章
相关标签/搜索