传递指针以更改其值但保持静止
我正在使用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的值?
答案 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);