gpt4 book ai didi

c - 动态访问结构的字段

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:00 24 4
gpt4 key购买 nike

我已经定义了这两个结构:

#define MAP_SIZE 5

typedef struct battle_cell {
int status_a;
int status_b;

int ship_a;
int ship_b;
} battle_cell;

struct battlemap {
battle_cell cell[MAP_SIZE][MAP_SIZE];
int progress_a;
int progress_b;
};

在映射和所有其他变量都为零的初始化之后:

for (i = 0; i < MAP_SIZE; i++) {
for (j = 0; j < MAP_SIZE; j++) {
map->cell[i][j].status_a = 0;
map->cell[i][j].status_b = 0;
map->cell[i][j].ship_a = 0;
map->cell[i][j].ship_b = 0;
}
}

map->progress_a = 0;
map->progress_b = 0;

有一点我必须检查存在于每个单元格中的 ship_a 和 ship_b 值,类似这样(逻辑比这个迭代稍微复杂一点):

for (i = posXB; i < posXB + SHIP_SIZE; i++) {
map->cell[posYB][i].ship_b = 1;
}

我需要对 ship_a 变量执行完全相同的操作。因此,我必须复制大量代码,因为我无法找到一种方法来动态获取结构中的字段。例如,我可以定义一个函数:

void cell_iteration (battlemap *map, int pos, int pos_y, int ship_size, /* field_parameter/pointer */) {
int i;
for (i = pos; i < pos + ship_size; i++) {
map->cell[pos_y][i].ship_b = 1; // use the field_parameter/pointer instead of ship_b
}
}

有没有一种优雅的方式来做这样的事情?

更新

只是澄清一下。结构绝对可以简化,但这不是我的问题。我刚刚尝试创建一个示例 :)

最佳答案

相反,如果 ship_aship_b 是第一个结构,您可以声明 int ship[2] 一个包含 2 个 int 的数组

关于c - 动态访问结构的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39903112/

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