函数返回指向二维数组中对象的指针

时间:2014-06-16 12:44:19

标签: c++ arrays struct

我有一个2d的struct _tile数组。 我想要一个函数返回一个tile。

这里是我用来生成2d数组tile的代码。我将做一些寻路和地牢工作。

函数get tile at

enum{normalfloor,door};

平铺结构。

     struct _tile{
int type;
bool isSet; 
int x,y;
_tile *camefrom;
int index;  
bool changeTo(int a){
    if(!isSet){
        type = a;
        isSet = 1;
        return 1;
    }
    return 0;
}   
};

地牢地图创建代码:

int Mw,Mh;
_tile **tile;
void create(int w = 30,int h = 30){
    Mw=w,Mh=h;      
    tile = new _tile *[w];
    for(int a=0,_index=0;a<w;a++){
        tile[a] = new _tile[h];
        for(int b=0;b<h;b++,_index++){
            _tile *C = &tile[a][b];
            C->type = normalfloor;
            //1) Start with a rectangular grid, x units wide and y units tall. Mark each cell in the grid unvisited.                
            C->isSet = 0;
            C->x = a;               
            C->y = b;
            C->index = _index;              
        }           
    }
}

我想要一个函数来返回给定索引的tile。 但由于某些原因,这不起作用。

_tile getTileAt(int index){
    int z[2];
    int rem = index/Mh;
    int X = index-(rem*Mh);
    int Y = index - X;
    return *tile[X][Y];
}

当我使用这个

            _tile *a; 
        a = getTileAt(10);
        a->changeTo(door);// here program crashes.

我一直在网上搜索。但没有得到满意的结果。

1 个答案:

答案 0 :(得分:1)

你弄乱了X的余数计算和计算。试试这个:

_tile getTileAt(int index){
    int X = index/Mh;
    int Y = index-(X*Mh);
    return *tile[X][Y];
}

你可以更简单:

_tile getTileAt(int index) {
  return *tile[index/Mh][index%Mh]; //mod returns the remainder
}