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';)。没有代码,自己理解,理解了就可以关了,没理解就重新循环再看看上面两点吧。