c/c++语言开发共享C:指向结构数组的动态指针数组

我有一个结构和这些结构的二维数组:

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

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐