常量指针上的混乱
confusion on constant pointer
int p=10;
const int * ptr=&p; // expression 1
据我通过表达式 1 的理解,指针 ptr 指向的数据是常数
所以如果我写
*ptr=10;
这是无效的, 但是如果我采用另一个指针变量,例如
int * pr=&p;
*pr=19;
cout<<*ptr;
会给我输出 19 所以现在 PTR 指向的数据发生了变化
,但之前我们已经看到 PTR 指向的数据是恒定的
,为什么数据会被另一个指针变量改变?
const int * ptr=&p;
表示ptr
指向的数据是const
,但仅相对于该指针。
指向的数据不一定是真正const
的(=最初声明const
(,如果不是,指向它的非const
指针(包括原始的常量指针转换为其非常量版本(可能会更改它。
如果某些数据确实const
,则尝试通过非const
指针修改它会导致未定义的行为。
这是非常基本的,所以我的建议是阅读一本基本的C++书。 尽管如此,我还是会提供答案。
int p = 10;
它是一个声明和定义一个名为p
的变量的语句,类型为int
。可以修改此变量的内容。这是因为变量p
不是常量。
显然,后面的语句p = 13;
仍然有效,它为该变量分配了一个新值。
现在你有这个:
const int* ptr = &p;
您正在定义一个名为ptr
的指针,该指针指向该变量。 将限定符const
添加到指针仅意味着您无法通过访问指针本身来修改变量的内容。
换句话说,指针只能用于(例如(读取p
的值。
另一方面:
int* pr = &p;
定义一个不const
限定的指针。
实际上,您可以通过使用该指针本身来访问和修改变量p
的内容。(*pr = 19;
是一个有效的陈述(。
有点远...
这是"更复杂的世界"背后的总体思路。
声明:
const int* ptr = &p;
这是可能的,因为 A 变量可以在其const
版本中隐式转换。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 常量指针上的混乱
- 数组和指针使算术混乱
- C++智能指针混乱
- 指针混乱char* and int*
- 链接列表插入,指针混乱
- 指针地址和参考混乱
- 链表中的指针算术混乱
- 交换功能 - 指针 - 混乱
- C ,向量,指针和对象混乱
- 指针,矢量列表=大混乱
- 指向数组混乱的指针
- 使用 std::sort 对指针向量进行排序,导致地址混乱
- 我有一些混乱的指针删除和分配指针到类