C++中常量指针和指针常量

常量指针

常量指针是指向常量的指针,指针指向的内存地址的内容是不可以改变的。

常量指针的定义“const int * p = &a;”,告诉编译器*p是常量,不能将*p作为左值进行操作。但是这里的指针p还是一个变量,它的内容存放常量的地址,所以先声明常量指针再初始化是允许的,指针也是允许修改的。例如:

int a =0,b=1;

const int * p; // 声明一个常量指针p

p = &a;          // p指向a

p = &b;          //修改指针p让其指向b,允许

*p = 2;           // 不允许

指针常量

指针常量是指针的常量,它是不可改变地址的指针,但是可以对它所指向的内容进行修改。

指针常量定义“int const * p=&a;”,告诉编译器,p是常量,不能作为左值进行操作,但是允许修改其指向的内容,即*p是可修改的。指针常量必须在声明的同时对其初始化,不允许先声明一个指针常量随后对其赋值,这和声明一般的常量是一样的。例如:

int a=0,b=1;

int * const p1 = &a;

int * const p2; // 不允许,必须对其进行初始化

p2=&b;            // 不允许,p2是常量不允许作为左值

*p1 = 2;           // 允许修改指针*p1的值

如果指针作为函数参数,当我们不想被调用函数随意修改参数指针而只是想修改参数指针指向的内容时,我们常把指针常量作为参数。例如:

有两个整形变量a,b,我们修个函数用于交换a,b的值,利用指针作为形参,函数修改参数指针的值是我们不希望的,这时可将参数设为指针常量,如果函数对指针修改编译是将报错。

void exchange(int * const a, int * const b)

{

int temp;

temp = *a;

*a = *b;

*b = temp;

}

事实上,如果函数不修改参数本身的值,我们一般对参数加上const限定,这也是提高代码质量的一个小技巧,在类的方法中,如果方法不修改类属性的值,我们也常将方法加上const。

总结 

常量指针,常量不变,指针可变。

指针常量,指针不变,常量可变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值