不能在C中为“const char * const * my_array”赋值

时间:2013-03-08 12:56:08

标签: c multidimensional-array const

贝娄是我的C代码:

const char *l = "some text";
const char * const *m = {l};

当我尝试编译该代码时,我收到此警告:

  

警告:从不兼容的指针类型初始化

有人可以解释为什么会发出警告,我应该如何初始化第二个变量(m)?

2 个答案:

答案 0 :(得分:3)

实际上,您没有以正确的方式使用const关键字。 const适用于它遇到的第一个左侧令牌,如果没有,则适用于第一个右侧令牌。

所以,在你的情况下:

const char * const *m;

第一个const适用于char,就像l一样。第二个适用于您的第一个*,这意味着m是指向常量内容的常量指针(“some text”)的指针。既然你没有写过

const char * const l;

与你的两个指针的常数存在冲突,因此发出警告。

我认为你想要的是保证l中存储的地址不会被程序改变。如果是这样,那么您必须将l的声明更改为此声明:

const char * const l = "some text";

答案 1 :(得分:1)

为什么不使用

const char* m[] = {l};

我认为这应该有用。

我想你实际上打算让m多于一个元素,否则你不会做那么复杂的事情,对吗?