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 關注
- 1231 瀏覽
添加回答
舉報