int *const p 与 const int *p

学过C/C++的同学肯定都有过那么一段被这几个东西整的晕头昏脑的时候,下面我们先看看一道题目:


int a = 248, b = 4;
int const c = 21;
const int *d = &a;
int *const e = &b;
int const * const f = &a;

问下面哪些操作会被编译器禁止:

选项A:*c = 32;

显然错误,c是int型变量,不是指针。

选项B:*d = 43;

错误。这里d被声明为常量指针(pointer to const),指针变量指向的值不能变,即不能通过指针
来修改变量的值,但可以通过a = 10;这样的方法直接修改a的值。

选项C:e = &a;

错误。e是一个指针常量(const pointer),即其指向不能改变,故错误。

选项D: f = 0x321f;

错误。这里的f既是指针常量又是常量指针,即其指向与所指向的值均是不可变的,故错误。

选项E:d = &b;

正确。d是常量指针,指向的内容不能变但指向可变。

选项F:*e = 34;

正确。e是指针常量,指向不能变但指向的内容可变。

是不是又有点晕了?那我就放大招了

要区别指针常量与常量指针只需要看const后面接的是什么就行了

比如对于

const int *d = &a;

const后面是int *d, *d是什么?a吧,就是指针d所指向的内容呀,这个内容用了一个const来限定
就是说这个内容是不可变的,所以d是一个常量指针。

再看:

int *const e = &b;

const后面是e,所以e是不可变的,即指针的指向不可变,e就是个指针常量了。

相信你理解了这个以后再遇到int const * const f = &a;这样玩出花儿来的定义也不会怕了,仔细
分析一下就可以想清楚了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值