指针常量与常量指针详细讲解

标题:指针常量与常量指针.

1.常量指针:

int a,b;
const int *p1=&a;
int const *p2=&b;

1.1记忆方法:
const在*p前面我们先读出const(常量)然后再读出指针,组合在一起就是常量指针。
1.2理解:
我们可以理解为一个"常量"的指针,并没有规定指向的是哪一个"常量",所以指针的指向可以改变。回到"常量"这个词,"常量"是不可以修改的量所以我们不能通过指针去修改这个"常量"的值。这里的常量加了引号,我们接下来会在注意事项中解释清楚。
1.3注意事项:
常量指针不能通过指针修改a的值,但是我们可以直接修改a的值。
1.3.1第一种写法

int a=10;
	const int *p=&a;
	a=20;
	cout<<"a="<<a<<","<<"*p="<<*p; 

这种写法是没有错误的,待会儿会解释。
1.3.2第二种写法:

int a=10;
	const int *p=&a;
	*p=20
	cout<<"a="<<a<<","<<"*p="<<*p; 

编译器对于上面这种写法会报错:[Error] assignment of read-only location ‘* p’。我们来翻译这句话,大概意思是:*p分配在了只读区域。所以不支持写入,为什么这么解释?是不是和上面的理解产生了冲突。并不,因为我们可以这样理解:a本身就是一个变量,只是我们从const int *p,这个方向看过去,我就把a看成一个常量,编译器我从这个方向就要这么看。但其实a本身是一个变量不能通过 * p来改变也可以通过其他方式改变。举一个例子:

float num=3.14;
	cout<<"num="<<(int)num;

很简单一个例子,num很明显就是一个float,但是我们就是要把他看成一个int。

2.指针常量:

int c;
int * const p3 =&c;

2.1记忆方法:
从表达式中可以看到int * 在const前面,int*可以代表指针,而const代表常量,组合在一起我们读作指针常量。
2.2理解:
我们知道常量是不可以修改的量。从字面意思可以看出常量修饰的是指针这两个字。所以我们不能将修改指针的值,指针的值又是一个地址,推之我们不能指针的指向(也就是指针的值)。但是可以修改变量c的值,因为并没有规定c是一个常量。

3.
当然const int * const p就是指针的指向不能改并且不能通过指针修改变量的值。但是还是可以直接通过直接访问a来修改a的值。解释见1.3

int a=10;
	const int * const p=&a;
	a=20;
	cout<<"a="<<a<<","<<"*p="<<*p; 

4.总结
本篇文章从我个人的角度解释了我对指针与常简单的联系,如有疑问欢迎在评论区留言或者私信本人。观点经供参考,如果有错误欢迎大家的指正。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值