passing pointer to change its value but stay still
I am working on C++ with allegro library.
there is draw_tiles function.
void draw_tiles(def_sm
You are passing the pointer by value, so a copy of the pointer is created. Inside loadTilemap
, you are assigning a new value to the copy of the pointer - but that doesn't affect the original pointer.
Try passing the pointer by reference by changing the loadTilemap
function signature to this:
void loadTilemap(int i,BITMAP *& tileLayer);
You need to pass a pointer to pointer to achieve that:
void loadTilemap(int i,BITMAP ** tileLayer){
char c[128];
sprintf(c,TILEPATHFORMAT,i);
*tileLayer= load_bitmap(c,NULL);
}
loadTilemap(s_world->tilemap, &TileMap);
That's assuming TileMap
is of type BITMAP *
.
Alternatively, you could simply return the BITMAP*
pointer as a result of 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);
This would allow you to get rid of tileLayer
parameter altogether, as you don't seem to be using it for anything else in loadTileMap
(i.e. it's only an output parameter).
Try this:
void loadTilemap(int i,BITMAP ** tileLayer){
char c[128];
sprintf(c,TILEPATHFORMAT,i);
*tileLayer = load_bitmap(c,NULL);
}
loadTilemap(s_world->tilemap, &TileMap);
The problem was that you pass the pointer to the BITMAP
by value. To get the new pointer value out of loadTilemap
, you have to pass it by reference.
EDIT:
On the other hand: why don't you just return the pointer to the newly created BITMAP
?
BITMAP * loadTilemap(int i* tileLayer){
char c[128];
sprintf(c,TILEPATHFORMAT,i);
return load_bitmap(c,NULL);
}
...
TileMap = loadTilemap(s_world->tilemap);