C++之指针常量和的常量指针浅析

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 *

因为我们 “不能把常量指针赋值给非常量指针斜体样式,反之可以”。

不足之处请不吝指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值