Chinaunix首页 | 论坛 | 博客
  • 博客访问: 503988
  • 博文数量: 99
  • 博客积分: 2030
  • 博客等级: 大尉
  • 技术积分: 783
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-12 09:11
文章分类

全部博文(99)

文章存档

2023年(2)

2022年(1)

2020年(1)

2019年(1)

2018年(4)

2017年(16)

2016年(60)

2015年(1)

2013年(3)

2006年(10)

我的朋友

分类: C/C++

2023-01-31 14:26:00

一、指向常量的指针

    先看例子 

点击(此处)折叠或打开

  1.     // pointer to const

  2.     const double pi=3.14;

  3.     //double *ptr=π // 错误:ptr是普通指针

  4.     const double *cprt=π

  5.     //*cptr=44; // 错误:不能通过*cptr赋值

  6.     const double ln=2.43;

  7.     cprt=&ln;

  8.    // *cptr=44; / 错误:不能通过*cptr赋值

  9.     double dval=2.43;

  10.     cprt=&dval;  // 可以 重新设置指针的地址
        第三行代码 const double *cprt 按照从右向左解读,*cptr是一个指针,指针的类型是double,并且该变量是const ,指针常量仅仅要求不能通过该指针改变对象的值。

二、常量指针

    老规矩先看例子 

点击(此处)折叠或打开

  1.     //const pointer
  2.     int errNumber=0,abc;

  3.     int *const curErr=&errNumber;

  4.     *curErr=1; //可以通过常量指针修改值(修改内容为非常量)

  5.     //curErr=&abc; //不可以修改常量指针的地址内容

  6.     const double *const pip=π

  7.     //*pip=3; //pip常量指针指向的内容为常量,不可以修改
     int *const curErr=&errNumber按照从右向左解读,常量指针。不变的是指针本身的值,而非指向的那个值。常量指针在初始化完成后,那个地址就不能改变了。

三、顶层const

        两个概念,指针所指是不是一个常量,指针本身是不是常量:
            1、 用底层const(low-level const)表示:指针所指向的对象是一个常量(指针常量 *变量),仅仅要求不能通过该指针改变对象的值
            2、 顶层const(top-level const) 表示:指针本身是一个常量(常量指针  *const),指针的值(地址)不可以修改
        先看例子 

点击(此处)折叠或打开

  1.     int i;

  2.     int *const p1=&i; //不能改变p1的值(地址),这是一个顶层const

  3.     const int ci=42; //不能改变ci的值(地址,这是一个顶层const

  4.     const int *p2=&ci; //允许修改p2的值(地址,这是一个底层的const

  5.     const int *const p3=p2; //靠右的是顶层const ,靠左的是底层const

  6.     const int &r=ci; //引用的const 都是底层const





阅读(161) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~