我有一个像这样的二维结构数组,
MapStruct myMap[50][50];
所以我们可以这样初始化,
myMap[0][0].left = 0;
myMap[0][0].up = 1;
myMap[0][0].right = 5;
我知道我也可以使用下面的例子,
MapStruct myMap[50][50] = { {0,1,5}, {2,3,7}, {9,11,8} ... };
但问题是这个 50x50 结构中有大量空白点。例如,从 [30][40] 到 [40][50] 可能是空的 这里和那里的其他一些点是空的,所以使用上面的括号表示法,我必须为这些空点留下像这样的 {},{},{} 的空括号。
现在我的问题是有没有办法初始化像下面这样的东西?
myMap[0][0] = {0, 1, 5}; // gives a syntax error
每点节省两行我会很高兴。
Ps:我使用索引 myMap[x][y] 作为键,就像字典对象一样,所以我不能只是去掉中间的那些空的,因为这会改变索引。
最佳答案
C99 允许
myMap[0][0] = (MapStruct){0, 1, 5};
如果您仅限于使用 C90,则可以使用辅助函数。
mypMap[4][2] = makeStruct(3, 6, 9);
但是请注意
MapStruct myMap[50][50];
如果没有初始化器,在函数中不会用 0 值初始化数组,所以你必须使用
MapStruct myMap[50][50] = {0};
还要注意,人们可能想知道在堆栈上分配这么大的数组是否明智。
关于c - 在一行中初始化一个结构数组? (在 C 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5993413/