Phi*_*l-R 0 c int pointers pointer-address
我正在使用C.我正在尝试做的是一个函数,它将返回一个包含指向对象的地址的int.然后,使用我收到的int(包含地址),并构建一个指向该地址的指针.
示例:
MyClass* obj = SomeMethodReturningAPointerOfMyClass();
int address = (int) &obj;
return address;
Run Code Online (Sandbox Code Playgroud)
我认为它适用于这一部分.我得到的值是-4197276.(也许我完全错了?)
然后,另一方面,我想做的事情如下:
MyClass* obj = (MyClass*) address;
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为我无法访问任何obj方法而不会收到错误.
我找到了一种方法:
MyClass* obj = SomeMethodReturningAPointerOfMyClass();
machine->registers[2] = (int)obj;
Run Code Online (Sandbox Code Playgroud)
然后,在我收到整数的另一种方法中:
MyClass* obj = (MyClass*)address;
Run Code Online (Sandbox Code Playgroud)
我可以完美地完成对象!可能不是那么干净但它应该为它的用途做好工作!
感谢所有花时间回答的人!
首先,不要这样做.你得到指针 的地址obj,而不是它指向的对象.obj已经等于那个地址了.&obj将在堆栈上有一些值(在您的情况下0xFFBFF464),并且当函数返回时它将变为无效.
第二关,不要这样做.一个int是不是一个内存地址C或C++类型-一个指针,而你已经有一个.
一个int与a不一样MyClass *.实际上,在64位系统(包括大多数现代PC)上,转换指针指向整数的指针会降低指针值的一半,结果无效.
如果希望函数返回对象的地址,则返回指针:
MyClass *GetAnObject(void) {
MyClass *result = ...;
return result;
}
Run Code Online (Sandbox Code Playgroud)
您永远不需要将指针转换为整数(有些情况下它是有效的,但对于C的新手,完全禁止更容易理解;这些边缘情况超出了这个问题的范围.)