2010/11/02

2010/11/2

关键字:指针和const限定符

 

const限定指针

唯一的作用是不能通过解引用该指针的方式修改所指向的对象的值.

const int *p;           //const指针声明时可以不初始化,虽然是不被推荐的

const int val1 = 0;

int val2 = 0;

p = &val1;              //const指针可以指向const对象

p = &val2;              //const指针可以更改指向的对象,并且可以指向非const对象

*p = 2;                 //错误,不能通过解引用的方式修改const指针所指向的对象,无论对象是非const还是const,这是const指针的唯一限定

int *p2 = 0;

p2 = &val1;             //错误,不能用非const指针指向const对象

 

const指针

const指针,本身的值不能修改,即不能修改指针所指向的对象(地址).一旦初始化就不能再次赋值.

int *const p3;                  //错误,const类型对象(包含指针)必须初始化

const int *p4;                  //正确,p4"指向const对象的指针",本身并非const类型,可以不用初始化

 

int main()

{

    int val = 0;

    int *const p = &val;        //const指针是限定指针一旦初始化就不能再次赋值,对指向const还是非const对象无限制

    p = &val;                   //错误,const指针一旦初始化就不能再次赋值,即使是赋值给之前指向的对象(地址)

    p = p;                      //错误,const指针一旦初始化就不能再次赋值,即使是用自身赋值

    *p = 1;                     //const指针不限制对象赋值

    int const *p1;              //等同于const int *p1;

    int *const p2;              //const指针必须在声明时初始化

 

    return 0;

}

 

指向const对象的const指针

const int val1 = 0;

const int *const p5 = &val1;//包含const指针和指向const对象的指针的特性

                            //1.一旦初始化就不能修改所指向的对象

                            //2.不能通过解引用修改所指向的对象的值

 

typedefconst

const int *p = 0;

实际上constint是可以互换的,const int *p等同于int const *p.

同理下面的也就好理解了:

typedef string *pstring;    //声明的是指向string的指针类型

const pstring cstr;         //等同于pstring const cstrstring *const cstr,看不出类型声明来可以互换const和类型

 

小窍门:const的声明比较费解时,可以采用和类型互换的方式分析.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值