• 指针和const限定符


    1,指向const对象的指针

    const double *cptr;    //cptr may point to a double that is const

    这里cptr是一个指向double类型的const对象的指针,const限定了cptr指针所指向的对象,而非cptr本身。也就是说cptr本身并不是const。在定义时不需要对他进行初始化允许给cptr重新赋值,使其指向另一个const对象。但不能通过cptr修改其所指对象的值

    const double pi = 3.14;

    cptr = π

    *cptr = 42;        //error:*cptr might be const

    const double x = 2.3.;

    cptr = &x          //ok

    意外收获:声明指针后,如果当时没有给指针赋初值,那么过后只能通过迅地址符,通过指针本身赋值,像下面*in = a;这样是非法的。

    int a = 0;
    int b = 1;
    int *in;
    //*in = a;
    in = &a;
    cout<<*in<<endl;

    允许把非const对象的地址赋给指向const对象的指针,但是不能把一个const对象的地址赋给一个普通的,非const对象的指针

    const double *cptr;

    double daval = 3.147;

    cptr = &daval;              //ok

    const double pi = 3.14;

    double *ptr = &pi;          //error

    const double *cptr = &pi;   //ok

    于是这里有一个问题,本来cptr这种指针,可以改变其指向的地址,但不能通过这个指针修改其指向的对象。但如果他指向的是一个非const类型的对象,那么该对象通过其他指向他的非cptr这种类型的指针是可以改变其值的,这也是一种修改的途径。ps:小困扰了我一下。

    可以把指向const的指针理解成:自以为指向const的指针

    double dval = 3.14;

    const double *cptr = &dval;

    *cptr = 2.07;               //error

    double *ptr = &dval;

    *ptr = 2.07;

    cout<<*cptr<<endl;          //prints 2.07

    2,const指针

    int errNumb = 0;

    int *const curErr = &errNumb;   //curErr is a constant pointer

    curErr是指向int型对象的const指针。

    const指针不能使其指向其他对象,但是可以使用该指针修改它所指向对象的值。

    const指针必须在定义时候初始化


  • 相关阅读:
    IR的评价指标之MRR
    双击启动tomcat中的startup.bat闪退原因及解决方法
    裁判文书网采集说明
    Java 验证码识别之多线程打码兔
    JVM 内存分配机制总结
    Java中多态的一些简单理解
    Java Callable并发编程模板
    JVM
    Command
    解决PHP下载文件时因时文件太大而报404错误
  • 原文地址:https://www.cnblogs.com/iloveyoucc/p/2368833.html
Copyright © 2020-2023  润新知