zoukankan      html  css  js  c++  java
  • 指针和const

    主要涉及两个类型:指向const类型对象的指针和const指针。

    1。指向const对象的指针

    我们可以使用指针来修改其所指对象的值,但是如果指针指向const对象,则不允许用指针来修改其所指对象的值。

    比如 const double *cptr;

    cptr本身并不是const,在定义时不需要对其进行初始化,允许对其重新赋值.

    这这里存在一个比较容易混淆的东西!!!

    将一个const类型对象的指针赋值给一个普通指针会导致错误:如const double pi=3.14;

                                                                                       double *p=π//error

    但是允许将一个非const对象的地址赋给指向const对象的指针:const double *cptr;

                                                                                         double dval=3.14;

                                                                                         cptr=&dval;

    所以这里就存在一个问题,就是我们并不知道指向const的指针指向的对象是否是const类型,所以一个可以理解为“自以为指向const的指针”。

    之前提到的void *指针可以保存任何类型对象的地址,但在这里存在例外,不能用void*指针保存const对象的地址,而必须使用const void*指针保存const对象的地址:

    const int a=42;

    const void *cpv=&a;//right

    void *pv=&a;//error

    2.const指针

    本身的值不能修改:因为是const量,所以定义的时候必须初始化。

    语句写法:int errNumb;

                   int *const curErr = &errNumb;

    3.指针和typedef

    根据书本上的描述,提出了如下问题:

    typedef string *pstring;

    const  pstring cstr;请问cstr变量是什么类型?

    大多数人的回答会是指向const string类型的指针。出现这种错误答案的缘由很简单,就是将typedef简单的看做一个字符扩展功能。将pstring与string *等同,然后代入,就可以理所当然地得到错误答案。

    我们先不看第一句,仅仅从第二句我们很容易得知cstr是const变量,pstring类型的const变量,pstring是什么类型呢?pstring是string *类型,所以答案是指向string类型的指针的const变量。

    const和指针结合在一起时由于const符号具体修饰内容的混淆会引起理解上的偏差,在读这类代码时要多加小心。

     

     

     

  • 相关阅读:
    NRF24L01 使用小结/自动应答/通道地址
    nRF24L01单片机通信的总结--看了就会用了
    彻底搞懂状态机(一段式、两段式、三段式)
    面向硬件的设计思维--时钟是电路的实际控制者
    组合逻辑电路-----竞争与冒险现象
    Win7、Win8、Win10系统USB-Blaster驱动程序无法安装的解决办法
    从DTFT到DFS,从DFS到DFT,从DFT到FFT,从一维到二维
    离散傅里叶级数DFS几个主要的特性
    离散傅里叶级数DFS
    Ubuntu12.10下Python(cx_Oracle)访问Oracle解决方案
  • 原文地址:https://www.cnblogs.com/ideawu1001/p/2789823.html
Copyright © 2011-2022 走看看