【发布时间】:2015-02-19 15:40:00
【问题描述】:
class Class1
{
int data;
int *dataPtr;
}
int main()
{
Class1 object;
Class1 *objectPtr = &object;
object.data = 1100;
object.dataPtr = &(object.data)
std::cout << object.dataPtr << std::endl; //0x22aaa4
std::cout << (void *) (object.data) << std::endl; //0x1b198
std::cout << (void *) &(object.data) << std::endl; //0x22aaa4
为什么(void *) (object.data) 与object.dataPtr 不同?
如果我想使用 memcpy 将值从其他地方复制到 object.data,我应该使用哪个内存位置?
memcpy( (void *) (object.data), source, size); 或
memcpy( (void *) &(object.data), source, size);
谢谢!
【问题讨论】:
-
一个是将整数转换为 void*,另一个是获取该整数的地址。
-
我在这里没有看到任何参考资料。
-
这个问题非常令人困惑。首先,您甚至从不使用
objectPtr。其次,它不是有效的 C++。 -
最后,你的中间输出是错误的。在所有系统上,它实际上是十六进制的 1100,或
0x44c。 (虽然从理论上讲,你已经在那里调用了 UB。)
标签: c++ pointers memory reference