3 回答
TA贡献1811条经验 获得超4个赞
从标准:
const char c = 'c';
char* pc;
const char** pcc = &pc; // not allowed
*pcc = &c;
*pc = 'C'; // would allow to modify a const object
TA贡献1828条经验 获得超3个赞
不能分配 char **值到 const char **指针有点模糊。鉴于 const存在限定符,编译器希望帮助您遵守不修改的承诺。 const价值。这就是为什么您可以分配一个 char *转到 const char *,但事实并非如此:“添加”显然是安全的。 const-指向一个简单的指针,但把它拿走是危险的。但是,假设您执行了以下更复杂的一系列任务: const char c = 'x'; /* 1 */char *p1; /* 2 */const char **p2 = &p1; /* 3 */*p2 = &c; /* 4 */*p1 = 'X'; /* 5 */
在第3行中,我们分配了一个 char **转到 const char **..(编译器应该会抱怨。)在第4行中,我们分配了一个 const char *转到 const char *这显然是合法的。在第5行中,我们修改了 char *指向-这应该是合法的。然而, p1最后指向 c,也就是 const..这发生在第4行,因为 *p2是真的 p1..这是在第3行中设置的,它是不允许的表单的赋值,这正是不允许第3行的原因。
const
(C+有更复杂的规则来分配Const限定的指针,这些规则允许您在不引起警告的情况下执行更多类型的赋值,但仍然可以防止无意中修改Const值的尝试。C+仍然不允许分配 char **转到 const char **,但它可以让您通过分配 char **转到 const char * const *.)
- 3 回答
- 0 关注
- 1268 浏览
添加回答
举报
