C++ const关键字(自学笔记,可能有错)

(1)在变量前用const修饰变量则,变量为常量不能再被修改,const int i和int const i是等价的。

(2)

         以下为CSDN博主「煮茶听雪」的原创文章,在此感谢。

         原文链接:const int *p, int *const p的区别_煮茶听雪的博客-CSDN博客

  

const int *p

int i1=30;
int i2=40;
const int *p=&i1;
p=&i2;  //此处,p可以在任何时候重新赋值一个新的内存地址。
i2=80;  //这里能用*p=80来代替吗?答案是不能
printf("%d",*p);  //输出80
分析:p的值是可以被修改的,即它可以重新指向另一个地址。但是不能通过*p来修改i2的值。
首先,const修饰的是整个*p(注意,是*p而不是p),所以*p是常量,是不能被赋值的。虽然p所指的i2是变量而不是常量;
其次,p前并没有用const修饰,所以p是指针变量。能被赋值重新指向另一个内存地址。

int * const p

先看const再看* ,p是一个常量类型的指针,不能修改这个指针的指向,但是这个指针所指向的地址上存储的值可以修改。



int i1=30;

int i2=40;

int * const p=&i1;

//p=&i2;  错误的。p不能再指向另一个新地址了。

i1=80;  //这里能用*p=80来代替,即可以通过*p修改i1的值。

printf("%d",*p);


分析:

此时p的值不能被赋值修改了,只能永远指向初始化时候的内存地址。相反,可用*p修改i1的值了。

所以:综上所述,

指针p因为有了const的修饰,所以为指针常量,即,指针p不能修改了。

整个*p前面没有const修饰,则*p为变量而不是常量,所以,可改变*p的值。

如果const修饰在*p前则不能改的是*p,而不是指p;

如果const是直接写在p前,则p不能改。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值