int型为什么可以转换为指针类型的句柄?
最近看windows编程,看到创建子窗口的ID字段时用的是 (HMENU)i; 注:i被定义为int型。
我不明白的是这里为什么能把int型强制转换成指针型的HMENU(即struct HMENU__ *)型呢? 大家帮解释一下。
这是winnt.h里面的一小段。
#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;
例子程序:
#include <stdio.h>
typedef struct tagmyHandle
{
int unused;
} *HmyHandle;
int main()
{
int i = 8;
HmyHandle myHandle = (HmyHandle)i; //这里为什么可以直接从int型强制转换成struct tagmyHanle * 型的??
printf("%d\n", myHandle); //这里可以输出8 ,怎么回事?如果直接用&i 就不对了。
return 0;
}