2013-03-08 76 views

回答

3

其實,您沒有正確使用const關鍵字。 const適用於它遇到的第一個左令牌,或者如果沒有,則適用於第一個右令牌。

所以,你的情況:

const char * const *m; 

第一const適用於char,就像爲l。第二個適用於您的第一個*,這意味着m是一個指向常量內容(​​「某些文本」)的常量指針的指針。既然你沒有寫過

const char * const l; 

與你的兩個指針的常量有衝突,因此警告。

我想你想要的是保證存儲在l中的地址不會被程序改變。如果是這樣,那麼你必須的l聲明改變這一個:你爲什麼要使用

const char * const l = "some text"; 
+0

可以提供以下文檔:*'const'適用於它遇到的第一個左令牌,或者如果沒有,則適用於第一個右令牌。感謝您的正確答案! – artaxerxe 2013-03-08 13:10:52

+0

在你的情況下,m是一個指向char常量的const指針的指針(就像@Rerito所說的)。根據順時針螺旋規則,你可以在這裏找到:http://c-faq.com/decl/spiral.anderson.html – 2013-03-08 13:13:47

+0

@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

1

爲什麼不使用

const char* m[] = {l}; 

我認爲應該工作。

我想你實際上打算m是不止一個元素長,否則你不會做這麼複雜的事情,對吧?

+0

,因爲我需要一個類型:'const char * const *' – artaxerxe 2013-03-08 13:08:09