初始化多维数组

时间:2017-12-21 13:28:30

标签: c arrays

我有这个矩阵,它包含一个4x4的double数组:

typedef struct {
    double data[4][4];
} mat;

在这里,我宣布我的mat

mat m1;

我想用零初始化我的mat

double data[4][4] = { { 0,0,0,0 },{ 0,0,0,0 },{ 0,0,0,0 },{ 0,0,0,0 } };
MAT_A.data = data;

得到了这个错误:

  

表达式必须是可修改的左值

  

'=':左操作数必须是l值

我也试过这个:

MAT_A->data = data;

修改

另一个问题是如何启动mat

4 个答案:

答案 0 :(得分:1)

  

我想用零启动我的垫子:

然后你可以简单地编码:

mat m1 = {0};

double data[4][4] = {0};

(而{}代替{0}也会有效,即使是非标准的)

您甚至可以使用memset清除区域(使用<string.h>标准标题):

double data[4][4];
memset (&data, 0, sizeof(data));

memset (&m1, 0, sizeof(m1));

BTW,如果gcc -O2 -march=nativem1datam1.data = data;,优化GCC等编译器(调用为CREATE CLUSTERED COLUMNSTORE INDEX CCI_tblName ON dbo.tblName WITH (MAXDOP = 1) )可能会在所有情况下生成相同的机器代码automatic variable(在call stack上)。

但是,数组(775 row groups)的赋值是非法的(因为数组会衰减为指针)。

你的标题错了:C没有多维数组,只有(单维)数组(可能是数组数组,结构数组等)。

答案 1 :(得分:1)

问题不在于初始化数组for (int i = 0; i < 4; i++) for (int j = 0; j < 4; j++) MAT_A.data[i][j] = data[i][j]; ,而是在以下任务中:

[AddINotifyPropertyChangedInterface]
public class MyViewModel
{
    public string MyProperty { get; set; }

    public MyViewModel()
    {
        MyProperty = "hello";
    }
}

要复制数组,您需要单独复制数组的元素:

groupdetails_table (groupid, no.of.members, created date) 

答案 2 :(得分:1)

问题是你不能将数组分配给结构,也不能将数组分配给数组。 C语法不允许它。

如果您想初始化变量,则不应使用赋值。这些是不同的东西; MAT_A.data = data;是作业。这是初始化:

mat m =
{
  .data = { { 0,0,0,0 },{ 0,0,0,0 },{ 0,0,0,0 },{ 0,0,0,0 } }
};

至于赋值,你可以做的是为结构赋一个结构,例如使用复合文字:

m = (mat) 
{
  .data = { { 0,0,0,0 },{ 0,0,0,0 },{ 0,0,0,0 },{ 0,0,0,0 } }
};

答案 3 :(得分:0)

您可以按如下方式显式初始化数组。

for (int i = 0; i < 4; i++)
{
    for (int j = 0; j < 4; j++)
    {
        MAT_A.data[i][j] = 0;
    }
}