Why I have the error for the following code:
const int r = 3;
int *const ptr = &r;
However it works normaly if I define r as a plain int. As I understand, the second line only defines the pointer ptr as a const, which means that the value of this pointer cannot be changed. But why I a const pointer cannot point to a const int?
The clockwise/spiral rule says that the definition
int *const ptr = &r;
makes ptr
a constant pointer to non-constant int
.
That is, while the variable ptr
itself can't be modified (you can't assign to ptr
), what it points to can. And that doesn't match the type of r
which is constant.
If you want a constant pointer to a constant int you need:
int const* const ptr = &r;
Now neither the variable ptr
can be modified, nor the data it points to.