我有这个矩阵,它包含一个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
?
答案 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=native
或m1
是data
或m1.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;
}
}