为了账号安全,请及时绑定邮箱和手机立即绑定

C中的双指针常量正确性警告

C中的双指针常量正确性警告

C
慕的地10843 2019-08-19 15:12:02
C中的双指针常量正确性警告指向非const数据的指针可以隐式转换为指向相同类型的const数据的指针:int       *x = NULL;int const *y = x;添加额外的const限定符以匹配额外的间接寻址应该在逻辑上以相同的方式工作:int       *      *x = NULL;int       *const *y = x; /* okay */int const *const *z = y; /* warning */-Wall但是,使用标志对GCC或Clang进行编译会产生以下警告:test.c:4:23: warning: initializing 'int const *const *' with an expression of type      'int *const *' discards qualifiers in nested pointer types    int const *const *z = y; /* warning */                      ^   ~为什么添加额外的const限定符“在嵌套指针类型中丢弃限定符”?
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

之所以const只能添加一个级别的原因是微妙的,并且在comp.lang.c FAQ中问题11.10解释。

简而言之,请考虑与您的密切相关的此示例:

const int i;int *p;int const **z = &p;*z = &i;/* Now p points to i */

C通过仅允许在第一个指向级别丢弃限定符来避免此问题(因此z不允许在此处进行赋值)。

您的确切示例不会遇到此问题,因为const第二级意味着*z无论如何都不会允许分配。在这种情况下,C ++ 允许它,但C的更简单的规则不区分你的情况和上面的例子。


查看完整回答
反对 回复 2019-08-19
  • 2 回答
  • 0 关注
  • 492 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信