在一本书中写道,我们不能将指针引用的内存更改为const,如:
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;
}发布于 2020-07-02 20:25:39
再次阅读代码中的注释:
const int* pA = &a;//指向常量的指针。不能通过此操作更改
a
它并不是说指针不能改变。它是指向的对象,不能更改(通过指针)。a是pA指向的对象。
我声明了指向常量的指针,但更改了它的内存位置,它运行了,但它应该会出现错误
它不应该“放弃”错误。你可以改变一个“常量指针”,也就是你可以让它指向另一个对象。你不能改变的是常量指针。但是你的指针不是const。
发布于 2020-07-02 20:32:52
首先,让我们来了解一下
const int *p;上面的这一行意味着p是一个指向常量整数的指针。这意味着p保存了一个'const int‘类型的变量的地址。这仅仅意味着你可以改变指针'p‘的值。但地址为'p‘的变量不能更改,因为它是常量int类型。现在,如果你这样做了
int* const p;这意味着指针现在是常量类型,并且保存了一个整数变量的地址。所以,这里的指针不能改变,但是它所指向的变量的值可以改变。
发布于 2020-07-02 20:41:29
如果您期望您的代码会出现错误,请将prt声明更改为-
int* const ptr;请参考此链接,它将帮助您了解更多详细信息Clockwise/Spiral Rule
https://stackoverflow.com/questions/62696213
复制相似问题