如何保存一个指针地址,以便另一个指针可以继续工作?
How to save a pointer address, so that another pointer can continue working on it?
有没有办法将指针的地址存储到任意变量(例如 int
)并再次使用该变量来分配第二个指针的地址?
我知道你可以轻松做到
int* p1;
int* p2;
p2 = p1;
我要找的是这样的
int* p1;
int* p2;
long addr_p1 = (long)p1;
p2 = doMagicCast(addr_p1);
感谢您的建议
这是正确的 C++ 方式:
#include <cinttypes>
int main() {
int* p1;
int* p2;
std::uintptr_t addr_p1 = reinterpret_cast<std::uintptr_t>(p1);
p2 = reinterpret_cast<int*>(addr_p1);
}
您需要使用 std::uintptr_t
而不是 long
,因为无法保证 long
可以容纳指针。
但是在 32 位平台上(其中 long
和指针通常有 32 位)您使用 long 的初始方法可能有效。
有没有办法将指针的地址存储到任意变量(例如 int
)并再次使用该变量来分配第二个指针的地址?
我知道你可以轻松做到
int* p1;
int* p2;
p2 = p1;
我要找的是这样的
int* p1;
int* p2;
long addr_p1 = (long)p1;
p2 = doMagicCast(addr_p1);
感谢您的建议
这是正确的 C++ 方式:
#include <cinttypes>
int main() {
int* p1;
int* p2;
std::uintptr_t addr_p1 = reinterpret_cast<std::uintptr_t>(p1);
p2 = reinterpret_cast<int*>(addr_p1);
}
您需要使用 std::uintptr_t
而不是 long
,因为无法保证 long
可以容纳指针。
但是在 32 位平台上(其中 long
和指针通常有 32 位)您使用 long 的初始方法可能有效。