c++ - 传递指针以更改其值但保持不动

标签 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); 

但在加载 Tilemap 之后,TileMap 变量保持不变。

下面的代码效果很好

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

tileLayer 点 0x003f93f8

如何将我的代码修复为 TileMap 指向 load_bitmap 的返回值?

最佳答案

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

通过将 loadTilemap 函数签名更改为此,尝试通过引用传递指针:

void loadTilemap(int i,BITMAP *& tileLayer);

关于c++ - 传递指针以更改其值但保持不动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7176792/

相关文章:

c++ - 语句 "(void)c;"的目的是什么?

C++ - CreateThread - 编译错误

asp.net - ASP.NET详细信息 View -编辑为空值错误

sql - aws redshift 中的 ILIKE 和 NOT ILIKE 与 total 不同

c++ - 为什么在使用字符索引数组时会出现这种不同的行为?

C++ 表达式必须有常量值

const 指针的 C++ typedef 解释

我可以制作一个从某个指针开始并在它开始的地方结束的循环吗?

c++ - 工厂方法中的输出参数

MySQL 函数,必须带回一行