For the life of me I can't figure out the proper syntax for creating an array of structures in C. I tried this:
struct foo {
int x;
int y;
} foo[][] = {
{
{ 1, 2 },
{ 4, 5 },
{ -1, -1 }
},
{
{ 55, 44 }
{ 100, 200 },
}
};
So for example foo[1][0].x == 100, foo[0][1].y == 5, etc. But GCC spits out a lot of errors.
If anyone could provide the pro开发者_JS百科per syntax that'd be great.
EDIT: Okay, I tried this:
struct foo {
const char *x;
int y;
};
struct foo bar[2][] = {
{
{ "A", 1 },
{ "B", 2 },
{ NULL, -1 },
},
{
{ "AA", 11 },
{ "BB", 22 },
{ NULL, -1 },
},
{
{ "ZZ", 11 },
{ "YY", 22 },
{ NULL, -1 },
},
{
{ "XX", 11 },
{ "UU", 22 },
{ NULL, -1 },
},
};
But GCC gives me "elements of array bar have incomplete type" and "excess elements in array initializer".
This creates and initializes a two-dimensional array of structures, with each row containing three. Note that you haven't provided an initializer for the array[1][2]
, which in this case means its contents is undefined.
struct foo {
const char *x;
int y;
};
int main()
{
struct foo array[][3] = {
{
{ "foo", 2 },
{ "bar", 5 },
{ "baz", -1 },
},
{
{ "moo", 44 },
{ "goo", 200 },
}
};
return 0;
}
EDIT: Made x pointer to const string. Try to make your examples close to your real code.
I think the easiest approach would be to split up the struct and array declarations:
struct foo {
int x;
int y;
};
int main()
{
struct foo foo_inst = {1, 2};
struct foo foo_array[] = {
{5, 6},
{7, 11}
};
struct foo foo_matrix[][3] = {
{{5,6}, {7,11}},
{{1,2}, {3,4}, {5,6}}
};
return 0;
}
The problem is that nested array declarations in C (and C++) cannot have arbitrary length for any array except the outermost. In other words, you can't say int[][] arr
, and you must instead say int[][5] arr
. Similarly, you can't say int[][6][] arr
or int [][][7] arr
, you would have to say int[][6][7] arr
.
Your first problem is the declaration of the array. you can only leave the first square-bracket set empty. the rest have to be explicitly declared.
so instead of this:
struct foo bar[2][]
you should do this:
struct foo bar[][4]
This is really the first thing to sort out.
精彩评论