2009-11-23 116 views
2

这究竟意味着什么?typedef _W64 unsigned int UINT_PTR,* PUINT_PTR;

typedef _W64 unsigned int UINT_PTR, *PUINT_PTR; 

这是否意味着* PUINT_PTR是一个指针(显然)和UINT_PTR不是指针?如果是这样,为什么叫做UINT_PTR? (我将读为unsigned int指针,或指向无符号整数)

由于

回答

7

是的,这意味着PUINT_PTR是一个指针和UINT_PTR不是指针。这有点令人困惑,但UINT_PTR(以及更标准化的uintptr_t)被定义为无符号整数,保证足够大以保存指针值。它通常用于棘手的代码,其中指针被放入整数值中,反之亦然。

_W64注释是Miscrosoft编译器的注释,当编译64位目标时,变量应该是64位而不是通常的32位,因为在64位平台上指针是64位,但是unsigned int通常仍然是32位。这确保了所有目标平台的sizeof(UINT_PTR) >= sizeof(void*)

第二个声明只是声明PUINT_PTR是指向_W64 unsigned int的指针,或者更具体地说是指向UINT_PTR的指针。