貝婁是我的C代碼:不能分配值 「爲const char * const的* my_array」 用C
const char *l = "some text";
const char * const *m = {l};
當我嘗試編譯代碼,我得到這樣的警告:
警告:初始化從兼容的指針類型
任何人能解釋我爲什麼會警告,我應該如何初始化第二個變量(m
)?
貝婁是我的C代碼:不能分配值 「爲const char * const的* my_array」 用C
const char *l = "some text";
const char * const *m = {l};
當我嘗試編譯代碼,我得到這樣的警告:
警告:初始化從兼容的指針類型
任何人能解釋我爲什麼會警告,我應該如何初始化第二個變量(m
)?
其實,您沒有正確使用const
關鍵字。 const
適用於它遇到的第一個左令牌,或者如果沒有,則適用於第一個右令牌。
所以,你的情況:
const char * const *m;
第一const
適用於char
,就像爲l
。第二個適用於您的第一個*
,這意味着m是一個指向常量內容(「某些文本」)的常量指針的指針。既然你沒有寫過
const char * const l;
與你的兩個指針的常量有衝突,因此警告。
我想你想要的是保證存儲在l
中的地址不會被程序改變。如果是這樣,那麼你必須的l
聲明改變這一個:你爲什麼要使用
const char * const l = "some text";
可以提供以下文檔:*'const'適用於它遇到的第一個左令牌,或者如果沒有,則適用於第一個右令牌。感謝您的正確答案! – artaxerxe 2013-03-08 13:10:52
在你的情況下,m是一個指向char常量的const指針的指針(就像@Rerito所說的)。根據順時針螺旋規則,你可以在這裏找到:http://c-faq.com/decl/spiral.anderson.html – 2013-03-08 13:13:47
@artaxerxe你可以檢查維基百科頁面關於const正確性:http://en.wikipedia。組織/維基/常量,正確性。這也可以從http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html 上找到的例子推斷出來,我只是用一種更容易記住的方式表達了_rule_。 – Rerito 2013-03-08 13:19:14
爲什麼不使用
const char* m[] = {l};
我認爲應該工作。
我想你實際上打算m
是不止一個元素長,否則你不會做這麼複雜的事情,對吧?
,因爲我需要一個類型:'const char * const *' – artaxerxe 2013-03-08 13:08:09
{}? – teppic 2013-03-08 13:01:21