我可以使用%p说明符输出Windows句柄吗?

sha*_*oth 3 c++ winapi pointers handle format-specifiers

这是对这个问题的一种后续行动.Windows SDK具有以下HANDLE定义的数据类型WinNT.h:

typedef void *HANDLE;
Run Code Online (Sandbox Code Playgroud)

此数据类型用于表示句柄.从技术上讲,句柄不是指针 - 它只是与Win32函数一起使用的神奇值.然而,它被声明用一个void*typedef 数据类型表示.

如果我想使用以下代码输出句柄十六进制值:

HANDLE handle = ...;
printf("%p", handle);
Run Code Online (Sandbox Code Playgroud)

它会合法吗?

Jon*_*ter 5

是的没关系,原因有两个.首先它实际上是一个指针(指向void的指针),其次%p不会神奇地检查堆栈上的值是否为指针 - 它只是抓取下一个指针大小的值并将其打印出来.