0

在 ANSI CI 中可以这样做:

const long *address = 0x00000002;  /* Example address */
printf("0x00000002 -> %ld", *address);

控制台将显示该内存地址的内容。但是 VC++ 中的代码抛出:

错误 C2440:“正在初始化”:无法从“int”转换为“const long *”

是否有从 VC++ 读取内存地址的本地方法,或者我必须调用 API?

提前致谢。

4

2 回答 2

4

您将地址表示为整数。您需要将其转换为适当类型的指针:

const long *address = reinterpret_cast<const long *>(0x00000002);

您需要在标准 C++ 中执行该转换。我不确定为什么您认为标准 C++ 中可以省略强制转换。

当然,当您运行代码时,您会遇到分段错误。

于 2013-11-07T20:49:37.900 回答
3

要设置该地址,请使用像

const long* address = (const long*) 0x0000002;  // C style

或者

const long* address = 
   reinterpret_cast<const long*>(0x000002); // C++ style

顺便说一句,在大多数系统上 0x0000002 不是有效地址(在应用程序的通常虚拟地址空间中)。请参阅有关虚拟内存虚拟地址空间的维基页面。

于 2013-11-07T20:50:26.493 回答