我有一个结构和这些结构的二维数组:
typedef struct { char exit_n; char exit_s; char exit_w; char exit_e; } room; room map[MAP_WIDTH][MAP_HEIGHT];
我需要一个指针数组结构。 以下代码编译,但我没有得到想要的结果。 有帮助吗? 这对我来说真的很困惑,任何解释都会受到赞赏
room *rooms; rooms = (room*)malloc(sizeof(room*) * ROOM_NUM); [..] rooms[n] = map[room_x][room_y]; [..]
实际上,我想你想要
room** rooms; rooms = (room**)malloc(sizeof(room*) * ROOM_NUM); [..] rooms[n] = &map[room_x][room_y];
这会为您提供一系列指向您房间的指针。
我很确定你想要的
sizeof(room)
您需要为结构分配足够的空间。 你只是为指针分配。
如果需要2D数组,也可能需要以不同的方式进行分配:请参阅此处动态分配C中的数组数组
我看到的主要问题是你使用的是sizeof(room*)
。 这意味着您将获取指向结构的指针的大小,这不是您想要的。 您想要分配结构的大小,因此请将sizeof(room)
。 此外,在这种情况下使用calloc
,而不是malloc
,因为您基本上通过将房间数乘以房间大小来实现前者的function。
在您当前的代码中, rooms
变成了一个room
结构数组,而不是一个指针数组。 如果你想要一个指针数组,每个指针指向你的map
数组,你需要另一层间接:
room** rooms = malloc(ROOM_NUM * sizeof *rooms); // ... rooms[n] = &map[room_x][room_y];
(或者您可以使用sizeof (room *)
代码而不是sizeof *rooms
;我更喜欢以这种方式编写它以避免重复类型信息。)
您需要为指针和房间分配空间,然后初始化指针以指向房间。
room *rooms; room **prooms; rooms = (room*)malloc((sizeof(room) + sizeof(room*)) * ROOM_NUM); prooms = (room**)(&rooms[ROOM_NUM]); for (int ii = 0; ii < ROOM_NUM; ++ii) prooms[ii] = &rooms[ii];
如果我理解正确,你需要一个指向map
所有room
值的指针数组。 由于MAP_WIDTH*MAP_HEIGHT
这样的值,我们需要很多指针:
room *rooms[MAP_WIDTH*MAP_HEIGHT];
上面将rooms
声明为指针数组。
现在,要分配值:
size_t i; size_t j; for (i=0; i < MAP_WIDTH; ++i) for (j=0; j < MAP_HEIGHT; ++j) rooms[i*MAP_HEIGHT+j] = &map[i][j];
我们基本上在map
找到每个元素的地址,并将其存储在rooms
中的正确条目中。
这是你想要的吗?
需要了解更多c/c++开发分享C:指向结构数组的动态指针数组,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享C:指向结构数组的动态指针数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979812.html