C中的雙指針常量正確性警告指向非const數(shù)據(jù)的指針可以隱式轉(zhuǎn)換為指向相同類型的const數(shù)據(jù)的指針:int *x = NULL;int const *y = x;添加額外的const限定符以匹配額外的間接尋址應(yīng)該在邏輯上以相同的方式工作:int * *x = NULL;int *const *y = x; /* okay */int const *const *z = y; /* warning */-Wall但是,使用標(biāo)志對(duì)GCC或Clang進(jìn)行編譯會(huì)產(chǎn)生以下警告:test.c:4:23: warning: initializing 'int const *const *' with an expression of type 'int *const *' discards qualifiers in nested pointer types int const *const *z = y; /* warning */ ^ ~為什么添加額外的const限定符“在嵌套指針類型中丟棄限定符”?
2 回答

POPMUISE
TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
之所以const
只能添加一個(gè)級(jí)別的原因是微妙的,并且在comp.lang.c FAQ中由問(wèn)題11.10解釋。
簡(jiǎn)而言之,請(qǐng)考慮與您的密切相關(guān)的此示例:
const int i;int *p;int const **z = &p;*z = &i;/* Now p points to i */
C通過(guò)僅允許在第一個(gè)指向級(jí)別丟棄限定符來(lái)避免此問(wèn)題(因此z
不允許在此處進(jìn)行賦值)。
您的確切示例不會(huì)遇到此問(wèn)題,因?yàn)?code>const第二級(jí)意味著*z
無(wú)論如何都不會(huì)允許分配。在這種情況下,C ++ 會(huì)允許它,但C的更簡(jiǎn)單的規(guī)則不區(qū)分你的情況和上面的例子。
- 2 回答
- 0 關(guān)注
- 511 瀏覽
添加回答
舉報(bào)
0/150
提交
取消