我想初始化一个包含数组的二维全局静态结构数组。 以下似乎不起作用。
struct MyStuct{
int a;
int b;
int c[2];
int d[2];
};
STATIC MyStuct[2][3] = {
{{1,1,{1,1},{1,1}},
{2,2,{2,2},{2,2}},
{3,3,{3,3},{3,3}}},
{{7,7,{7,7},{7,7}},
{8,8,{8,8},{8,8}},
{9,9,{9,9},{9,9}}}
};
有什么建议吗?
由于
答案 0 :(得分:1)
struct MyStuct{
int a;
int b;
int c[2];
int d[2];
};
static struct MyStuct test [2][3] =
{
// | COL 0 | | COL 1 | | COL 2 |
/* ROW 0 */ { {1,1,{1,1},{1,1}}, {2,2,{2,2},{2,2}}, {3,3,{3,3},{3,3}} },
/* ROW 1 */ { {7,7,{7,7},{7,7}}, {8,8,{8,8},{8,8}}, {9,9,{9,9},{9,9}} }
};
您的矩阵声明必须使用结构作为类型,即struct MyStuct test
仅供测试:
#include <stdio.h>
int main (void)
{
struct MyStuct{
int a;
int b;
int c[2];
int d[2];
};
struct MyStuct test [2][3] =
{
// | COL 0 | COL 1 | COL 2 |
/* ROW 0 */ { {1,1,{1,1},{1,1}}, {2,2,{2,2},{2,2}}, {3,3,{3,3},{3,3}} },
/* ROW 1 */ { {7,7,{7,7},{7,7}}, {8,8,{8,8},{8,8}}, {9,9,{9,9},{9,9}} }
};
for (size_t i=0; i< 2; i++)
{
for (size_t j=0; j<3; j++)
{
printf("test[%zu][%zu].a = %d\n", i, j, test[i][j].a);
printf("test[%zu][%zu].b = %d\n", i, j, test[i][j].b);
for (size_t z=0; z<sizeof(test[i][j].c)/sizeof(test[i][j].c[0]); z++)
{
printf("test[%zu][%zu].c[%zu] = %d\n", i, j, z, test[i][j].c[z]);
}
for (size_t z=0; z<sizeof(test[i][j].c)/sizeof(test[i][j].c[0]); z++)
{
printf("test[%zu][%zu].d[%zu] = %d\n", i, j, z, test[i][j].c[z]);
}
printf("\n");
}
}
return 0;
}
答案 1 :(得分:0)
您只需要以适当的方式声明2D静态全局数组, 即,
struct MyStuct{
int a;
int b;
int c[2];
int d[2];
};
static MyStuct arrayName[2][3] = {
{ { 1, 1, { 1 ,1 }, { 1, 1 } },
{ 2, 2, { 2, 2 }, { 2, 2 } },
{ 3, 3, { 3, 3 }, { 3, 3 } } },
{ { 7, 7, { 7, 7 }, { 7, 7 } },
{ 8, 8, { 8, 8 }, { 8, 8 } },
{ 9, 9, { 9, 9 }, { 9, 9 } } }
};
上面的代码工作正常。你可以查看这个