首页 > 后端开发 > C++ > 为什么在 C 中不能将指针到指针转换为非常量指针到指针到常量?

为什么在 C 中不能将指针到指针转换为非常量指针到指针到常量?

Susan Sarandon
发布: 2025-01-01 02:42:09
原创
529 人浏览过

Why Can't I Convert a Pointer-to-Pointer to Non-Const to a Pointer-to-Pointer to Const in C  ?

转换指针:为什么要限制指针到指针的转换?

在 C 中,通常允许将指针强制转换为非-const 类型为指向 const 类型的指针。这遵循“常量正确性”原则,只允许修改常量数据。

但是,在处理指向指针的指针时会出现一个特殊的异常。与前面提到的转换不同,禁止将“指向非 const 指针的指针”转换为“指向 const 指针的指针”。

考虑以下代码片段:

char *s1 = 0;
const char *s2 = s1; // OK...
char *a[MAX]; // aka char **
const char **ps = a; // error!
登录后复制

为什么将 a 赋值给 ps 是非法的吗?答案就在标准中:

const char c = 'c';
char* pc;
const char** pcc = &pc;   // not allowed
*pcc = &c;
*pc = 'C';                // would allow to modify a const object
登录后复制

在这个例子中:

  1. c 是一个常量字符。
  2. pc 是一个指向 a 的非常量指针字符。
  3. 尝试使用 &pc 初始化 pcc(指向 const 的指针)是不允许。

如果允许此转换,它将允许对常量对象进行修改。例如,*pcc 将指向 const 字符,但 *pc 是可修改的。这违反了 const 正确性的前提,因为它可能允许对常量数据进行更改。

因此,将指向非 const 的指针转换为指向 const 指针的指针的限制源于需要维护常量对象的完整性并防止意外的数据修改。

以上是为什么在 C 中不能将指针到指针转换为非常量指针到指针到常量?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板