贝娄是我的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