const是一个C语言的关键字,它限定一个变量不允许被改变,知道这个就能读懂这篇博客。
要理解他们的用法一定不要从左往右理解,要从指针符号*处分割理解,可以在*左边加个<-符号辅助理解,<-符号无实意。
1.比如const char *p就可以看成const char <- *p,意思是一个指针p指向一个const char常字符类型数据的地址,p是可指向其他地址的,而被指向的值是个不能改变的常量。
- #include <iostream>
- int main()
- {
- const char a = 'a';
- const char b = 'b';
- char c = 'c';
- const char *p = &a;
- p = &b;//正确,p由a的地址指向了b的地址
- //p = &c;//错误,p指向的是const char类型,不是char类型。
- //a = 'b';//错误,因为a是const类型。综上所述p是可指向其他地址的,而被指向的值是常量。
- }
很多人把char const *p 和 const char *p混淆就是从左往右理解造成的,其实这两句话意思是一样的,只是不同的程序员有不同的习惯,意思都是一个指针p指向一个const char常字符类型数据。
2.char *const p可以看成char <- *const p,意思是一个常指针p指向char类型数据的地址,既然是常指针,那么p就不可指向其他地址,而被指向的值可改变,因为被指向的是char类型数据,当然是可改变的。
- #include <iostream>
- int main()
- {
- char a = 'a';
- char b = 'b';
- const char c = 'c';
- //char *const p = &c;//错误,p指向char类型数据
- char *const p = &a;//正确
- //p = &b;//错误,p是常指针,不能改变p指向的地址。
- a = 'b';//正确,此时*p的值也是'b'
- }
3.const char *const p一个常指针指向一个常量。结合上面两点,常指针,不能改变p指向的地址值(即p = &a;又p = &b;),常量,不能改变p指向地址值的值(即p = &a;又 a = 'b';)。没有代码,自己理解,理解了就可以关了,没理解就重新循环再看看上面两点吧。