转换指针:为什么要限制指针到指针的转换?
在 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
在这个例子中:
如果允许此转换,它将允许对常量对象进行修改。例如,*pcc 将指向 const 字符,但 *pc 是可修改的。这违反了 const 正确性的前提,因为它可能允许对常量数据进行更改。
因此,将指向非 const 的指针转换为指向 const 指针的指针的限制源于需要维护常量对象的完整性并防止意外的数据修改。
以上是为什么在 C 中不能将指针到指针转换为非常量指针到指针到常量?的详细内容。更多信息请关注PHP中文网其他相关文章!