const int *p与int *const p的区别

 

const int  *p

const int   *p=0;//const修饰(*p),说明*p不能被修改,但是p<地址值可以修改>,

//p是一个指向int型的被定义为const的对象的指针,

//微妙在于p本身不是常量,可以重新被赋值,使其指向不同的对象,但不能修改p指向的对象(*p).

//可用const int *p=0;定义的指针,指向const 对象及非const对象

const int *p=0;

const int i_m=12;

int val=333;

p=&i_m;//正确,p可以被修改.但*p=i_m;是错误的.

p=&val;正确

val=444;//正确val不是常量,可以被修改.

*p=555;//错误,不能修改(*p)

 

int *const p

int *const p;

//p 是指向一个非const 对象的const 指针

//定义读作p 是一个指向int 类型对象的const 指针

//不能赋给p其他的地址值 但可以 修改curErr 指向的值

 

下面的代码说明我们可以怎样使用p

        do_something();

        if ( *p) {
            errorHandler();
            *p = 0;   // ok: 重置指针所指的对象
         }

    试图给const 指针赋值会在编译时刻被标记为错误

    p = &i_m; // 错误

    指向const 对象的const 指针的定义就是将前面两种定义结合起来

 例如

        const double pi = 3.14159;
        const double *const p= &pi;

    在这种情况下 p指向的对象的值以及它的地址本身都不能被改变  我们可以从

右往左将定义读作 pi_ptr 是指向被定义为const 的double 类型对象的const 指针

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值