指针常量和常量指针

请问下面的两行代码p有什么区别?

         int* const p1 = &i;
         constint *p1 = &i;

我们的测试代码如下:

#include<stdio.h>
 
int main()
{   
         inti = 10;
         inta = 3;
         int* const p = &i;
         constint *p1 = &i;
 
         p= &a;
         *p= a;
         p1= &a;
         *p1= a;
        
         getchar();
}

编译过程为:

错误 error C2166: 左值指定 const 对象

错误 error C2166: 左值指定 const 对象

 

指针常量和常量指针:

代码1中的p是不可以改变地址的指针,但是所指向的内容可以修改,叫做指针常量;

代码2中的p所指向的内容是不能改的,但是本身却是可以修改的,叫做常量指针。

 

如何从概念上区分:

我认为要区别指针常量和常量指针很容易,只要知道是谁修饰谁就好啦!比如说“指针常量”,意思是:指针是一个常量;“常量指针”的主体是一个指针,但是是指向常量的指针。所以对应了两个特性,那就是“指针常量”是一个常量,不能修改;“常量指针”是一个指针,但是指向的值不能够修改。

 

如何在代码上区分:

我觉得直接看const后面修饰的是什么就可以了。

int * const p = &i; p就是一个指针,且是个常量。因此p = &a;就是非法操作。

const int *p = &i; 那么就是*p为一个常量,但是指针p本身是可变的。因此*p = a就是非法操作。

 

两者合体:

那么一个变量,同时是常量指针和指针常量呢?那么只要用两个const就可以了吧?综合上面两个的定义,我觉得在只要这样就可以啦~~~

const int * const p1 = &i;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值