为什么将数组分配给矩阵是非法的?

时间:2018-10-09 14:24:54

标签: c arrays matrix

我对C语法有疑问,这怎么可能:

int a[ ][2] = { 1, 2, 3, 4 };

这是合法的,为什么不这样:

int a[] = { 1, 2, 3, 4 };
int b[ ][2] = a;

甚至:

int a[] = { 1, 2, 3, 4 };
int *b[2] = a;

不合法。

从指针计算的角度来看,很难单独解决吗?仅仅是语法问题还是编译器无法推断出正确的内存步长?

gcc错误:

main.c:14:19: error: invalid initializer
     int b[ ][2] = a;

1 个答案:

答案 0 :(得分:1)

解释很简单。

两个主要原因:

  1. 在C中,您无法分配数组。 在C中允许赋值的唯一复杂类型是结构和联合。
  2. 全局变量的初始化需要常量表达式。