passing pointer to change its value but stay still

前端 未结 3 1361
臣服心动
臣服心动 2021-01-28 03:36

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         


        
相关标签:
3条回答
  • 2021-01-28 04:01

    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);
    
    0 讨论(0)
  • 2021-01-28 04:08

    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).

    0 讨论(0)
  • 2021-01-28 04:14

    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);
    
    0 讨论(0)
提交回复
热议问题