C++ 传递指针以更改其值但保持静止
传递指针以更改其值但保持静止 我在C++中使用AlrGRO库。 有绘制瓷砖的功能C++ 传递指针以更改其值但保持静止,c++,pointers,null,C++,Pointers,Null,传递指针以更改其值但保持静止 我在C++中使用AlrGRO库。 有绘制瓷砖的功能 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<SIGH
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);
}
}
}
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 points返回值?您需要将指针传递给指针才能实现这一点:
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*
类型
或者,您也可以简单地返回位图*
指针作为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
中的任何其他内容(即,它只是一个输出参数)。您正在按值传递指针,因此将创建指针的副本。在loadTilemap
中,您正在为指针的副本指定一个新值,但这不会影响原始指针
通过将函数签名更改为以下内容,尝试通过引用传递指针:
void loadTilemap(int i,BITMAP *& tileLayer);
试试这个:
void loadTilemap(int i,BITMAP ** tileLayer){
char c[128];
sprintf(c,TILEPATHFORMAT,i);
*tileLayer = load_bitmap(c,NULL);
}
loadTilemap(s_world->tilemap, &TileMap);
问题是您通过值传递指向位图的指针。要从loadTilemap
中获取新指针值,必须通过引用传递它
编辑:
另一方面:为什么不返回指向新创建的位图的指针呢
BITMAP * loadTilemap(int i* tileLayer){
char c[128];
sprintf(c,TILEPATHFORMAT,i);
return load_bitmap(c,NULL);
}
...
TileMap = loadTilemap(s_world->tilemap);
什么是返回类型的加载位图?+ 1,用于指向指针而不是指针指针——这是C++,我们有引用。