在ANSI C中我可以这样做:
const long *address = 0x00000002; /* Example address */
printf("0x00000002 -> %ld", *address);
控制台将显示该内存地址的内容。但VC ++中的代码抛出:
错误C2440:'初始化':无法从'int'转换为'const long *'
是否存在从VC ++读取内存地址的本机方式,或者我必须调用API?
提前致谢。
答案 0 :(得分:4)
您的地址表示为整数。您需要将其强制转换为适当类型的指针:
const long *address = reinterpret_cast<const long *>(0x00000002);
你需要在标准C ++中执行该演员表。我不确定为什么你认为在标准C ++中可以省略强制转换。
当然,当您运行代码时,您将遇到分段错误。
答案 1 :(得分:3)
要设置该地址,请使用类似
的演员表const long* address = (const long*) 0x0000002; // C style
或
const long* address =
reinterpret_cast<const long*>(0x000002); // C++ style
BTW,在大多数系统上,0x0000002不是有效地址(在应用程序的通常虚拟地址空间中)。请参阅virtual memory上的wikipage&amp; virtual address space