1、char const * const s1= "hello";
char const * s2 = s1; //合法
char *const s2 = s1; //不合法
一直想不通为什么会出现上面的情况?
(1)先来看个简单的例子:
int const a = 3; //定义一个int类型的常量
int b = a;//合法
可以看出,把一个常量赋值给一个普通变量是合法,也就是说:
char * const s1 = "hello";
char * s2 = s1; //合法
上面只是保证变量a和变量s1不能够被重新赋值,但是变量b和变量s2是可以被重新赋值的。
(2)char const *s1="hello";
char *s3 = s1;//不合法
s1本身是可以被重新赋值的,它不是常量指针,但是它指向的内容是不允许修改的;
假设char *s3 = s1;是合法的,那么我们就可以修改s1所指向的内容了,这是不允许的,编译器会报错。
总结:对于一个本身是常量的变量,我们可以把它赋给一个普通变量(包括指针变量);
对于一个所指向的内容不允许修改的指针,必须一致保持“所指向的内容不允许修改”,不管如何赋值。