【发布时间】:2017-08-19 17:05:05
【问题描述】:
int p=10;
const int * ptr=&p; // expression 1
据我理解的表达式1,指针ptr指向的数据是常量
所以如果我写
*ptr=10;
这是无效的, 但是如果我采用另一个指针变量,例如
int * pr=&p;
*pr=19;
cout<<*ptr;
会给我输出 19
所以现在 ptr 指向的数据发生了变化
但之前我们已经看到 ptr 指向的数据是常量
为什么数据被另一个指针变量改变了?
【问题讨论】:
-
你必须先了解什么是常量指针和指向常量的指针
-
const 限定符是指针的属性,而不是被指向的东西。
-
const int *表示不能(不应该)通过这个指针改变数据。数据本身可能是恒定的,也可能不是恒定的。 -
表达式1表示不能使用该指针修改数据。它并没有告诉指针指向的数据是常量。
-
@HolyBlackCat 感谢您清除我的错误概念