【问题标题】: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 指针。