微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

指向非常量数据的常量指针

如何解决指向非常量数据的常量指针

考虑以下情况 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 举报,一经查实,本站将立刻删除。