【发布时间】:2013-03-24 18:24:56
【问题描述】:
我需要一种简单的方法将指针转换为 int,然后再返回指针。我需要它作为 int 的可移植性,因为 int 在我的项目中比指针更容易携带。
启动播放器并返回指针:
SoundPlayer* player = new FxPlayerTiny();
return (int)player; // this works, but is it correct?
使用指针 int 停止播放器:
FxPlayerTiny* player = static_cast<FxPlayerTiny*>((int*)num); // this gives me an error
FxPlayerTiny* player = (FxPlayerTiny*)((int*)obj); // this works, but is it correct?
delete player;
【问题讨论】:
-
呃,int 怎么携带更方便?不,那个代码是不安全的。
-
如果你真的真的必须转换成不透明的东西,至少使用
void*。 -
为什么int比指针更容易使用?这听起来不对。此外,不能保证整个指针适合 int。 C 提供了 intptr_t(大多数 C++ 实现也提供了它),它是一个整数类型,保证足够大以容纳一个指针。使用 reinterpret_cast 在两者之间切换。
-
@James:不能保证
intptr_t和uinptr_t存在;在指针大于支持的最宽整数的实现上,它们不会。但我从未听说过这样的实现。此外,这些类型是在 C99 中引入的,因此较旧的 C 编译器(和 Microsoft 的)可能不支持它们。 -
修复您的项目,使其能够直接处理指针。
标签: c++ visual-c++ pointers casting