1. 指针常量——指针类型的常量(char* const name
)
该指针是一个常量;也就是它指向某一个固定地址,不可以改变;
从它的书写方式也可以看出const
强调的是指针name
,即name
指针是const
常量;
指针常量在定义时一定要初始化;此后我们不能再让它指向别的地址;
char* const name ="wang";
name [3]='q';
name ="zhang"; //error
name =new char [5]; //error
name =new char('e'); //error
不能用一个字符常量来初始化指针常量 ,可以用字符串常量或另一个指针常量来初始化;
const char a='A';
char b='A';
char* const name =a; //error
char* const name =b; //error
char* const name ='A'; //error
2. 常量指针——指向常量的指针(const char *name
)
该指针指向的是一个常量;
从书写方式也可以看出const
强调的是char
(类型),name
指向一个const char
;
该指针所指的地址是可以被改变的
const char *name ="chen";
name[3]='q';//error name数组是常量
name ="lin";
name =new char [5];
name =new char ('e');
3. 如果把指针常量和常量指针加起来 保护作用异常明显
const char *const name="wang";
name[3]='e'; //error
name="zhang"; //error
name=new char[5]; //error
cout<<name[3]<<endl;
4. 指针常量和的常量指针与一般指针
任何指针都不能赋值给指针常量,指针常量的指针是常量不可修改
常量指针不能赋值给非常量指针,反之可以
指针常量
char* const name ="wang"
const char a='A';
char b='A';
char* const name =a; //error
char* const name =b; //error
char* const name ='A'; //error
常量指针
const char *p1;
char *p2;
p1=p2;//OK
p2=p1;//error 如果允许,那么就可以通过p2来修改p1,但实际上p1不可被修改,所以error
p2=(char *)p1;//OK 强制类型转换现在p1是char *类型
5. 常量指针与函数参数
当函数参数为常量指针时可以避免函数内部不小心修改指针所指地方的内容(保护数据),
例如strcpy 函数中的第一个形参是char *
;
而strcpy 函数中的第二个形参是 const char *
;
所以strcpy 函数中的第一个实参只能是char *
;
而第二个实参可以是const char *
也可以是char *
;
因为我们 “不能把常量指针赋值给非常量指针斜体样式,反之可以”。
不足之处请不吝指正