传递指针以更改其值但保持不变
传递指针来更改其值但保持不动
我正在使用 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);
,但在 loadTilemap 之后,TileMap 变量保持不变。
下面的代码工作得很好
char c[128];
sprintf(c,TILEPATHFORMAT,i);
tileLayer= load_bitmap(c,NULL);
tileLayer点0x003f93f8
如何将我的代码修复为TileMap点load_bitmap的返回值?
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_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);
}
}
}
and loadTilemap function.
void loadTilemap(int i,BITMAP * tileLayer){
char c[128];
sprintf(c,TILEPATHFORMAT,i);
tileLayer= load_bitmap(c,NULL);
}
I expect
following code change TileMap to points somewhere
loadTilemap(s_world->tilemap,TileMap);
but after loadTilemap, the TileMap variable stay still.
the following code works very well
char c[128];
sprintf(c,TILEPATHFORMAT,i);
tileLayer= load_bitmap(c,NULL);
tileLayer points 0x003f93f8
How to fix my code to TileMap points return value of load_bitmap?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您正在按值传递指针,因此会创建指针的副本。在
loadTilemap
中,您正在为指针的副本分配一个新值 - 但这不会影响原始指针。尝试通过将 loadTilemap 函数签名更改为以下内容来通过引用传递指针:
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:您需要传递一个指向指针的指针来实现这一点:
假设
TileMap
的类型为BITMAP *
。或者,您可以简单地返回
BITMAP*
指针作为loadTilemap
的结果:这将允许您完全摆脱
tileLayer
参数,如您似乎没有将它用于loadTileMap
中的其他任何内容(即它只是一个输出参数)。You need to pass a pointer to pointer to achieve that:
That's assuming
TileMap
is of typeBITMAP *
.Alternatively, you could simply return the
BITMAP*
pointer as a result ofloadTilemap
:This would allow you to get rid of
tileLayer
parameter altogether, as you don't seem to be using it for anything else inloadTileMap
(i.e. it's only an output parameter).试试这个:
问题是您按值将指针传递给
BITMAP
。要从loadTilemap
获取新的指针值,您必须通过引用传递它。编辑:
另一方面:为什么不将指针返回到新创建的
BITMAP
?Try this:
The problem was that you pass the pointer to the
BITMAP
by value. To get the new pointer value out ofloadTilemap
, 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
?