传递指针以更改其值但保持静止

时间:2011-08-24 14:06:11

标签: c++ pointers null

传递指针以更改其值但保持静止

我正在使用allegro库开发C ++。

有draw_tiles功能。

void draw_tiles(def_small_world * s_world,BITMAP * dest){
    BITMAP *TileMap=NULL; 

    loadTilemap(s_world->tilemap,TileMap); 
    for(int y = 0;y<SIGHTY*2+1;y++)
    {
        for(int x = 0;x<SIGHTX*2+1;x++)
        {
            pasteTile(s_world->tile[y][x].kind,TileMap,dest,x,y);
        }
    }

}

和loadTilemap函数。

void loadTilemap(int i,BITMAP * tileLayer){
    char c[128];
    sprintf(c,TILEPATHFORMAT,i);
    tileLayer= load_bitmap(c,NULL);
}

我希望

以下代码将TileMap更改为某处

loadTilemap(s_world->tilemap,TileMap); 

但在loadTilemap之后,TileMap变量保持不变。

以下代码效果很好

char c[128];
sprintf(c,TILEPATHFORMAT,i);
tileLayer= load_bitmap(c,NULL);

tileLayer指向0x003f93f8

如何修复我的代码到TileMap点返回load_bitmap的值?

3 个答案:

答案 0 :(得分:2)

您正在按值传递指针,因此会创建指针的副本。在loadTilemap内,您要为指针的副本分配一个新值 - 但这不会影响原始指针。

尝试通过将loadTilemap函数签名更改为:

来通过引用传递指针
void loadTilemap(int i,BITMAP *& tileLayer);

答案 1 :(得分:0)

您需要将指针传递给指针才能实现:

void loadTilemap(int i,BITMAP ** tileLayer){
   char c[128];
   sprintf(c,TILEPATHFORMAT,i);
   *tileLayer= load_bitmap(c,NULL); 
}

loadTilemap(s_world->tilemap, &TileMap); 

假设TileMap的类型为BITMAP *

或者,您可以根据BITMAP*简单地返回loadTilemap指针:

 BITMAP* loadTilemap(int i,BITMAP * tileLayer){
   char c[128];
   sprintf(c,TILEPATHFORMAT,i);
   return load_bitmap(c,NULL); 
}

TileMap = loadTilemap(s_world->tilemap, TileMap);

这将允许您完全删除tileLayer参数,因为您似乎没有将它用于loadTileMap中的任何其他内容(即它只是一个输出参数)。

答案 2 :(得分:0)

试试这个:

void loadTilemap(int i,BITMAP ** tileLayer){
    char c[128];
    sprintf(c,TILEPATHFORMAT,i);
    *tileLayer = load_bitmap(c,NULL);
}


loadTilemap(s_world->tilemap, &TileMap); 

问题在于您将指针传递给BITMAP的值。要从loadTilemap中获取新指针值,您必须通过引用传递它。

修改

另一方面:为什么不直接将指针返回到新创建的BITMAP

BITMAP * loadTilemap(int i* tileLayer){
    char c[128];
    sprintf(c,TILEPATHFORMAT,i);
    return load_bitmap(c,NULL);
}

...

TileMap = loadTilemap(s_world->tilemap);