第一个是指向常量的指针
第二个是常量指针
很简单啊,看*前面的东东,它表示指针指向的类型,第一个const char就是常量,第二个char当然是普通字符型了,*后面的const表示这个变量本身是常量,即常指针。
const char * name
name 是指向常量的指针, 意思是name所指的地方是常量,如果有这样的语句
*name = 'a'; 编译会出错。 name本身不是常量, 所以像name++; name = p;这样的语句都是合法的。
char * const name;
name是常量,如果这样定义 那么 所以像name++; name = p;这样的语句编译会报错。
而name所指的东西不是常量, 可以写出 *name = 'a';这样的语句。
const char* name; 是指向常量的指针,它的意思是一旦name指向了一片内存空间,那么就不可以通过name来修改这片内存的数据,但name还可以再指向别的内存空间。
char* const name; 是常量指针,它的意思是,一旦name初始化指向了一片内存空间,name就不可以再指向别的内存空间,但可以通过name来修改这片内存空间的数据。
第一种是“指向常量的指针”,就 指针name是可以变的,但是它指向空间的值不可变,*name不可变,如 *name = 't'就是错的
第二种是 “常指针” , 指针 name 是不可变的,它只能指向这个空间,但指向的空间的值可变,就是可以有 *name = ‘c'这样的操作
很简单么,关键看const最近修饰的是哪个
char * const name;
修饰的是name,所以那么被常量化了,那么不看const的话,name是什么,是一个指针,所以很显然name是一个常指针
const char * name;
修饰的是char,所以指向常量的指针
FYI,const char * name;也可以写作char const * name; 两者是一个意思