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

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

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

我在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<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++,我们有引用。