在一本书中写到,我们不能改变指针指向常量所引用的内存,就像:-
int a = 0, b = 2;
const int* pA = &a; // pointer-to-const. `a` can't be changed through this
int* const pB = &a; // const pointer. `a` can be changed, but this pointer can't.
const int* const pC = &a; // const pointer-to-const.
//Error: Cannot assign to a const reference
*pA = b;
pA = &b;
*pB = b;
然后我写了一个代码来检查这个,在那里我声明了指向const的指针,但是改变了它的内存位置,它运行了,但是它应该给出错误->;
#include <iostream>
int main()
{
int a=12;
const int* ptr;
ptr = &a;
std::cout<<*ptr<<"\n";
std::cout<<ptr<<"\n";
std::cout<<*ptr<<"\n";
int b=20;
ptr=&b;
std::cout<<*ptr;
return 0;
}
首先,让我们来理解…的含义是什么
const int *p;
上面一行表示p是指向常量整数的指针。 这意味着p保存了一个“const int”类型的变量的地址。 这仅仅意味着您可以更改指针'p'的值。 但是不能更改地址为“p”的变量,因为它是const int类型的。 现在,如果你这么做了
int* const p;
这意味着指针现在是const类型的,并且保存着一个整数变量的地址。 所以,这里指针不能改变,但是它所指向的变量的值可以改变。
再次从代码中读取注释:
const int* pA = &a; // pointer-to-const. `a` can't be changed through this
它没有说指针不能更改。 是指不能(通过指针)改变的被指向的对象。 a
是pa
指向的对象。
我声明了指向const的指针,但是更改了它的内存位置,它运行了,但是应该会给出错误
它不应该“给”错误。 你可以改变一个“指向常量的指针”,也就是你可以让它指向另一个对象。 不能更改的是常量指针。 但你的指针不是常量。
如果您希望您的代码会出现错误; 将prt声明更改为-
int* const ptr;
参考此链接,它将帮助你更详细地理解顺时针/螺旋规则