我的大脑最近变得模糊不清,我不能为我的生活记住为什么以下的C代码:
char a[3][3] = { "123", "456", "789" };
char **b = a;
生成以下警告:
warning: initialization from incompatible pointer type
有人可以帮我解释一下。
谢谢。
答案 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;