将指针地址转换为int

时间:2014-02-01 16:04:12

标签: c++

初学者问题:我如何获取指针的地址并将其保存为int? 例如:

int *ptr = xyz;
int i = static_cast<int>(ptr);

因此,如果ptr指向内存地址123,我应该是123.我的编译器说它是error: invalid static_cast from type 'int*' to type 'int'

猜猜我错过了什么,但我不知道是什么。

3 个答案:

答案 0 :(得分:12)

您可以使用reinterpret_castint无法保证能够无损地存储指针,因此您应该使用std::intptr_t类型。

答案 1 :(得分:1)

您也可以使用C风格的演员:

int *ptr = xyz;
int i = (int) ptr;

Here's一个很好的讨论,比较C风格的演员与reinterpret_cast

答案 2 :(得分:0)

您可以使用以下函数将任何指针获取为 unsigned long。 int 不能保证完成任务。

template <typename T>
static constexpr inline auto ptrToAddr(T *pointer) noexcept
{
  return reinterpret_cast<std::uintptr_t>(pointer);
}