我想创建一个新结构,它是两个相同结构的组合。这些子结构中的每一个都包含一个标量双精度和三维数组。但是,当我尝试初始化结构时,尝试为数组赋值时会出错。
我没有编译错误,但是当我尝试查看嵌套结构中的数组的值时,我发现非常完全错误的疯狂数字。
您知道我在做什么错吗?
typedef struct quackStruct {
double s;
double v[3];
} quackStruct;
typedef struct dualquackStruct {
quackStruct q1;
quackStruct q2;
} dualquackStruct;
int main() {
quackStruct duck1 = { .s = 0.0, .v = { 0.5,4.0,2.1 } };
quackStruct duck2 = { .s = 0.85, .v = { 20.0, 10.0, -5.0 } };
/* I tried this... but it didn't work
dualquackStruct ducks = { duck1, duck2 }; */
/* this didn't work either */
dualquackStruct ducks = { .q1.s = 0.0, .q1.v = { 0.5, 4.0, 2.1 },
.q2.s = 0.85, .q2.v = { 20.0, 10.0, -5.0 } };
printf("%f\n", ducks.q1.s);
printf("%f\n", ducks.q1.v[0]);
printf("%f\n", ducks.q1.v[1]);
printf("%f\n", ducks.q1.v[2]);
printf("%f\n", ducks.q2.s);
printf("%f\n", ducks.q2.v[0]);
printf("%f\n", ducks.q2.v[1]);
printf("%f\n", ducks.q2.v[2]);
return 0;
}
答案 0 :(得分:4)
您的第一行确实可以编译。但是-您不能两次定义相同的变量...
在第二行中,您需要对大括号内的q1和q2结构进行嵌套初始化,而不是使用.firstlevelfield.secondlevelfield下两级。:
dualquackStruct ducks = { .q1 = { .s = 0.0, .v = { 0.5, 4.0, 2.1} },
.q2 = { .s = 0.85, .v = {20.0, 10.0, -5.0} } };