如何解决指向非常量数据的常量指针
考虑以下情况 1:
const int n = 5;
int* p = &n;
这是无效的,因为 &n
属于 cont int*
类型,而 p
属于 int *
类型(类型不匹配错误)。
现在,考虑这种情况 2:
int k = 4;
int *const p = &k;
本案例编译成功,没有任何错误。显然,p
属于 int * const
类型,&k
属于 int *
类型。在这种情况下,存在类型不匹配,但它是有效的。
问题:即使存在类型不匹配,为什么第二种情况仍然有效?
解决方法
在这种情况下,存在类型不匹配
没有;在这种情况下没有类型不匹配。它是一个指向非成本的指针,你用一个指向非常量的指针来初始化它。
或者,如果您坚持存在“不匹配”,则类似于以下“不匹配”:
const int b = 42;
为什么第二种情况有效
简单地说:初始化器的常量性与它是否初始化一个常量对象无关。此外,初始化器是非类类型的纯右值,因此 const 限定甚至不适用于它。
,首先,int *const
确实表示指向非常量 int 的 const 指针。所以绝对没有指针类型和指针类型之间的类型不匹配。
其次,你总是可以将非常量变量的地址转化为指向常量的指针。所以这也是有效的:
int n = 5;
const int * p = &n;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。