3 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
從標(biāo)準(zhǔn):
const char c = 'c';
char* pc;
const char** pcc = &pc; // not allowed
*pcc = &c;
*pc = 'C'; // would allow to modify a const object

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
不能分配 char **
值到 const char **
指針有點(diǎn)模糊。鑒于 const
存在限定符,編譯器希望幫助您遵守不修改的承諾。 const
價(jià)值。這就是為什么您可以分配一個(gè) char *
轉(zhuǎn)到 const char *
,但事實(shí)并非如此:“添加”顯然是安全的。 const
-指向一個(gè)簡(jiǎn)單的指針,但把它拿走是危險(xiǎn)的。但是,假設(shè)您執(zhí)行了以下更復(fù)雜的一系列任務(wù): const char c = 'x'; /* 1 */char *p1; /* 2 */const char **p2 = &p1; /* 3 */*p2 = &c; /* 4 */*p1 = 'X'; /* 5 */
在第3行中,我們分配了一個(gè) char **
轉(zhuǎn)到 const char **
..(編譯器應(yīng)該會(huì)抱怨。)在第4行中,我們分配了一個(gè) const char *
轉(zhuǎn)到 const char *
這顯然是合法的。在第5行中,我們修改了 char *
指向-這應(yīng)該是合法的。然而, p1
最后指向 c
,也就是 const
..這發(fā)生在第4行,因?yàn)?/trans> *p2
是真的 p1
..這是在第3行中設(shè)置的,它是不允許的表單的賦值,這正是不允許第3行的原因。
const
(C+有更復(fù)雜的規(guī)則來(lái)分配Const限定的指針,這些規(guī)則允許您在不引起警告的情況下執(zhí)行更多類型的賦值,但仍然可以防止無(wú)意中修改Const值的嘗試。C+仍然不允許分配 char **
轉(zhuǎn)到 const char **
,但它可以讓您通過(guò)分配 char **
轉(zhuǎn)到 const char * const *
.)
- 3 回答
- 0 關(guān)注
- 1230 瀏覽
添加回答
舉報(bào)