C++ C++;是否将数字转换为类型的指针?

C++ C++;是否将数字转换为类型的指针?,c++,pointers,casting,dereference,C++,Pointers,Casting,Dereference,我有以下代码: int* anInt = new int(5); uintptr_t memAddr = (uintptr_t)&anInt; Log("memAddr is: " + std::to_string(memAddr)); int* anotherInt = (int*)&memAddr; Log("anInt is: " + std::to_string(*anInt)); Log("anotherInt is: " + std::to_string(*anoth

我有以下代码:

int* anInt = new int(5);
uintptr_t memAddr = (uintptr_t)&anInt;
Log("memAddr is: " + std::to_string(memAddr));
int* anotherInt = (int*)&memAddr;
Log("anInt is: " + std::to_string(*anInt));
Log("anotherInt is: " + std::to_string(*anotherInt));

现在我希望另一个otherint指向与anInt相同的值,但是当前代码使另一个otherint指向memAddr的值。如何仅使用memAddr将另一个指针设置为指向anInt的值?

您可以直接键入一个指向整数的强制转换指针。这将使
另一个int
指向与
anInt
相同的int

uintptr_t memAddr = (uintptr_t)anInt;
...
int* anotherInt = (int*)memAddr;
或者,您可以让
memAddr
存储指针的地址(指向指针的指针)并按如下方式使用:

uintptr_t memAddr = (uintptr_t)&anInt;
...
// only works if the variable "anInt" is still alive
int* anotherInt = *(int**)memAddr;

................. 什么int*anotherInt=(int*)*memAddr;不要使用C样式转换。您的第四行可能存在别名冲突,并且可能由于对齐而存在约束冲突。如果我使用int*anotherInt=(int*)*memAddr;然后我得到了一个错误:“*”的操作数必须是一个点。你确实是正确的,我用这个解决了这个问题,但决定使用另一个更好的标识符方法:)