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

标签 c struct initializing

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

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/

相关文章:

在子结构中定义方法的 Golang 基础结构

c - 在 C 中的单独函数中初始化指针

c++ - 结构初始化作为参数

c - 在 C 中的单独函数中初始化指针

c - evp_crypt 在 c 中的 for 循环中不起作用

python - gcc 链接器的问题 - 为 python 编译 c 函数

c - 我得到了 3 个结构,我必须使用堆并将一些数据输入到结构的成员中

c++ - 尝试将用户定义类型的 Vector 插入用户定义类型 Vectors

c++ - mmap 文件,其中包含一个不受该文件支持的额外页面

c - 使用文件为c编程中的变量赋值