【问题标题】:C++ Pointer to const [duplicate]C ++指向const的指针[重复]
【发布时间】:2019-10-23 18:32:50
【问题描述】:

为什么1是错误的,2是合法的。

这段代码取自C++ Primer 5th edition,关于这个没有太多细节[编辑:这不是重复问题,所谓的原始问题很笼统]

const double pi = 3.14;
const double *cptr = π
*cptr = 42;   // 1
double dval = 3.14;
cptr = &dval;  // 2

【问题讨论】:

    标签: c++ pointers reference constants


    【解决方案1】:

    cptr 是一个指向双精度常量的指针。最初它指向常数双 pi。 *cptr = 42; 将尝试更改 pi 的值。但是,由于 pi 是一个常数值,因此无法更改。

    cptr = &dval; 改变了 cptr 的值,即它现在包含了 val 的地址。这是允许的,因为 cptr 不是常量指针。

    【讨论】:

      【解决方案2】:

      因为cptr一个指向双精度常量的指针

      在执行*cptr = 42; 时,您尝试更改cptr 指向的变量,因此您尝试更改pi 的值,这是一个常量。

      当您执行cptr = &dval; 时,您重新分配指针以指向一个全新的事物,这很好,因为cptr 不是const 指针。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        • 2020-02-04
        相关资源
        最近更新 更多