C xpression不那么麻烦,您的答案似乎会让事情变得更糟。(别误会,我很欣赏这个答案,我只是不太明白)养成习惯,把世界看作是内存中以某种排列方式排列的瓷砖,而不是某种编程语言中的结构。。 TileType maps[DLVL_MAX][LEVEL_HEI

C xpression不那么麻烦,您的答案似乎会让事情变得更糟。(别误会,我很欣赏这个答案,我只是不太明白)养成习惯,把世界看作是内存中以某种排列方式排列的瓷砖,而不是某种编程语言中的结构。。 TileType maps[DLVL_MAX][LEVEL_HEI,c,arrays,pointers,C,Arrays,Pointers,xpression不那么麻烦,您的答案似乎会让事情变得更糟。(别误会,我很欣赏这个答案,我只是不太明白)养成习惯,把世界看作是内存中以某种排列方式排列的瓷砖,而不是某种编程语言中的结构。。 TileType maps[DLVL_MAX][LEVEL_HEIGHT][LEVEL_WIDTH]; void f(int dlvl) { TileType level_map[LEVEL_HEIGHT][LEVEL_WIDTH] = &(maps[dlvl]); ... } T


xpression不那么麻烦,您的答案似乎会让事情变得更糟。(别误会,我很欣赏这个答案,我只是不太明白)养成习惯,把世界看作是内存中以某种排列方式排列的瓷砖,而不是某种编程语言中的结构。。
TileType maps[DLVL_MAX][LEVEL_HEIGHT][LEVEL_WIDTH];
void f(int dlvl) {
    TileType level_map[LEVEL_HEIGHT][LEVEL_WIDTH] = &(maps[dlvl]);
    ...
}
TileType level_map[LEVEL_HEIGHT][LEVEL_WIDTH] = &(maps[dlvl]);
memcpy(level_map, &maps[0], sizeof(level_map));
TileType (*level_map)[LEVEL_HEIGHT][LEVEL_WIDTH];  // pointer to 2D array
level_map = &maps[0]; // reassign pointer to the address of `maps` first element
   TileType level_map[LEVEL_HEIGHT][LEVEL_WIDTH] = &(maps[dlvl]);
TileType (*plevel_map)[LEVEL_HEIGHT][LEVEL_WIDTH] = maps[dlvl];
(*plevel_map)[x][y]
TileType * pplevel_map = maps[dlvl][0];
pplevel_map[x]
pplevel_map += sizeof(**maps);
pplevel_map[x]
TileType (*aplevel_map)[LEVEL_WIDTH] = maps[dlvl];
aplevel_map[x][y]
 TileType maps[DLVL_MAX * LEVEL_HEIGHT* LEVEL_WIDTH];
  void foo(TileType *maps, int levelid, int x, int y)
  {
      TileType tile = BLANK;

      map[levelid * LEVEL_HEIGHT * LEVEL_WIDTH + y * LEVEL_WIDTH + x]
        = tile;
  }