2013-03-08 50 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