首页 > 解决方案 > 指向 const 的 C++ 指针

问题描述

为什么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++pointersreferenceconstants

解决方案


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

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


推荐阅读