如何在C中投射二维数组?

时间:2011-01-17 08:07:29

标签: c arrays pointers initialization

我的大脑最近变得模糊不清,我不能为我的生活记住为什么以下的C代码:

char a[3][3] = { "123", "456", "789" };
char **b = a;

生成以下警告:

warning: initialization from incompatible pointer type

有人可以帮我解释一下。

谢谢。

5 个答案:

答案 0 :(得分:10)

char (*b)[3] = a;

这将b声明为指向大小为3的char数组的指针。请注意,这与char *b[3]不同,后者将b声明为3个char指针的数组。 / p>

另请注意char *b = a错误,仍然会发出与char **b = a相同的警告。

答案 1 :(得分:1)

试试这个,

   char a[3][3] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9' }};
   char *b = &a[0][0];

因为a是数组的字符数组,你需要将它们初始化为一个字符。

答案 2 :(得分:0)

这是对的。 a是一个指针。

char *b定义了一个指向char的指针。

char **b定义指向char的指针。

答案 3 :(得分:0)

问题是**没有静态分配。

您可以使用以下内容完成此简单版本:

char a[3][3] = {"123", "456", "789"};
char *b[3] = {a[0], a[1], a[2]};

答案 4 :(得分:-1)

a仍然是指向char的指针:

char* b = a;