gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:18:42 25 4
gpt4 key购买 nike

指向非 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 限定符“丢弃嵌套指针类型中的限定符”?

最佳答案

const 只能加深一层的原因很微妙,由 Question 11.10 in the comp.lang.c FAQ 解释。 .

简要地考虑一下这个与您的例子密切相关的例子:

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

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

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

关于c - C 中的双指针常量正确性警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com