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 关注
- 1175 浏览
添加回答
举报