C++ 指向常量的指针

C++ Pointer to const

本文关键字:指针 常量 C++      更新时间:2023-10-16

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

这段代码摘自C++入门书第5版,对此没有太多细节[编辑:这不是重复的问题,所谓的原始问题很笼统]

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

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

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

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

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

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