当用到指针时,const所修饰的对象牵涉到指针本身和它指向的对象两个实体。当我们将关键字const放到一个指针声明的前面时,这时指针所指向的对象为常量,例如:
char s[] = "Gorm";
const char *pc = s;//指针pc所指向的字符串为常量
我们使用声明符号*const将指针本身说明为常量,该指针称为常指针(或者常量指针)。例如下列代码段中的cp是常指针,就是一个不能移动的固定指针,但是它所指的数据可以改变。
void f1(char *p)
{
char s[] = "Gorm";
const char *pc = s;//pointer to constant 指针所指向的字符串为常量
pc[3] = 'g';//error:不能修改常量
pc = p;
char *const cp = s;
cp[3] = 'a';//ok
cp = p; //error
const char *const cpc = s;
cpc[3] = 'a';//error
cpc = p;//error
}
理解:
char *const cp;//cp是一个常指针,指向字符串(const修饰cp,说明cp不能改变,指向的字符串可以改变)
char const *pc;//pc是一个指针,指向常量字符串(const修饰*,说明pc指向的字符串不可以改变,pc本身可以改变)
const char*const cpc;//指向常量的常指针(cpc本身和cpc指向的字符串都不可以改变)
and:
const char *p;
char const *p;
这两种写法表达的意思完全一样。