gpt4 book ai didi

c - 在一行中初始化一个结构数组? (在 C 中)

转载 作者:太空狗 更新时间:2023-10-29 16:04:03 24 4
gpt4 key购买 nike

我有一个像这样的二维结构数组,

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com