一、const与指针组合
1、指向常量的指针(指针指向的是一个不可改变的常量):
const char * pc="abcd";//声明指向常量的指针
pc[3]='X';//编译错误
pc="efgh";//正确
这里pc的指向的常量的地址a的内容(“abcd”红色代表不可变)是不可变的,但是pc的指向是可变的。
2、常指针
char * const pc="abcd";//声明常指针
pc[3]='X';//编译正确
pc="eggh";//编译错误;
pc指针的指向不可变(红色的箭头代变不可变),但是指向的内容“abcd”可变
3、指向常量的常指针
const char * const pc="abcd";//声明指向常量的常指针
pc[3]='X';//编译错误
pc="efgh";//编译错误
指向常量的常指针的指向和指向的内容均不可以改变(箭头和内容均为红色)
对于const的写法:
const type 和type const是等价的,所以对于上面指向常量的指针和常指针的写法可以使用括号加以理解:
//指向常量的指针
const (char) * pc="abcd";
(char) const *pc="abcd";
//常指针
(char*) const pc="abcd";
const (char*) pc="abcd";
//指向常量的常指针
const (char *) const pc="abcd";
加入了括号,可以方便理解:对于指向常量的指针const修饰的类型是char,*pc作为常量不可变,而*pc=a,则a的内容不可变;
对于常指针 const 修饰的是char *(字符指针),pc指针本身作为常量不可变,也就是pc的内容不可变(pc的内容就是a的地址),则指向不可变。