有人可以解释PVOID在以下函数中使用的是什么以及如何使用它:
BOOL DoSomething(PVOID pMemPhy)
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的代码片段(up.cpp):
#include <stdio.h>
typedef unsigned long long Uint64;
int main()
{
void *p = (void*)0xC0001234;
Uint64 u64 = (Uint64)p;
printf("{%llx}\n", u64);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用32位gcc 4.8.1编译它,我得到输出:
{ffffffffc0001234}
Run Code Online (Sandbox Code Playgroud)
使用64位gcc 4.8.1编译它,我得到输出:
{c0001234}
Run Code Online (Sandbox Code Playgroud)
是的,64位的值为32位.gcc 4.8.1来自openSUSE 13.1.
我也试过它的Visual C++ 2010和x86的64位编译器(有点代码变化,__int64和%I64x),以及令人惊讶的得到相同的结果.
当然,我打算{c0001234}同时使用x86和x64.但为什么会有这样的差异呢?