我编译了64位Windows操作系统的应用程序。
应用程序应保存64位地址,我必须决定变量类型,以保存它们。我想长期保存它们。但是sizeof(long) == 4
。我在哪里以及如何保存地址
答案 0 :(得分:10)
您应该将内存地址存储在指针中:
void *myaddr = 0x0123456789ABCDEF; // memory address
int *myaddr2 = 0x0123456789ABCDEF; // pointer to int in memory, dereferencable
您可以获取如下变量的地址:
int myvar;
int *addrofmyvar = &myvar;
printf("%p", addrofmyvar); // use %p to print pointers
注意:关于指针(特别是void指针),C和C ++之间存在一些差异。请参阅C和C ++标准。没有“C / C ++”这样的东西。
答案 1 :(得分:7)
如果您打算将指针存储为数字,请使用uintptr_t
或intptr_t
。它们保证匹配指针的大小和表示。
否则你不会编写可移植代码。
答案 2 :(得分:4)
您应该使用实际指针(地址中的任何类型)来存储地址。
答案 3 :(得分:2)
我没有尝试过但可能需要长时间工作。
请检查此链接:http://msdn.microsoft.com/en-us/library/s3f49ktz%28v=vs.80%29.aspx
无符号长long,8个字节,相当于unsigned __int64
范围:从0到18,446,744,073,709,551,615
答案 4 :(得分:0)
编写跨平台代码时,请勿使用LONG
或LONG LONG
。 LONG
在不同平台/不同编译器上的大小不同。