如何在C编程中初始化多维数组

时间:2017-11-21 15:29:05

标签: c arrays initialization variable-length-array

我在运行此代码时遇到错误

int row1=2,col1=2;

int mat1[row1][col1]=
{
    {1,5},
    {4,6}
};

这段代码有什么问题?

IDE:CodeBlocks

  

错误:可能无法初始化变量大小的对象|

3 个答案:

答案 0 :(得分:6)

这里有一个可变长度数组。这样的数组不能初始化。如果维度是常量(即数字常量,而不是声明为const的变量),则只能初始化数组:

int mat1[2][2]=
{
    {1,5},
    {4,6}
};

答案 1 :(得分:3)

根据C规范,数组定义为

int mat1[row1][col1]=
{
    {1,5},
    {4,6}
};

VLA (Variable Length Array) ,无法初始化。

引用C11,章节§6.7.6.2/ P4,

  

[...]如果大小是整数常量表达式   并且元素类型具有已知的常量大小,数组类型不是可变长度   数组类型;否则,数组类型是可变长度数组类型。

和章节§6.7.9

  

要初始化的实体的类型应为未知大小或完整的数组   不是可变长度数组类型的对象类型。

您需要使用编译时常量表达式作为数组维度才能使用大括号括起初始值设定项。

您可以使用#define MACRO,例如

#define ROW 2  //compile time constant expression
#define COL 2  //compile time constant expression

int mat1[ROW][COL]=
{
    {1,5},
    {4,6}
};

答案 2 :(得分:1)

您正在尝试初始化可变大小的对象。您可以尝试稍后在其他地方分配值,或者只使用数字而不是变量。