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指針,或指向無符號整數)
由於
這究竟意味着什麼?typedef _W64 unsigned int UINT_PTR,* PUINT_PTR;
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
這是否意味着* PUINT_PTR是一個指針(顯然)和UINT_PTR不是指針?如果是這樣,爲什麼叫做UINT_PTR? (我將讀爲unsigned int指針,或指向無符號整數)
由於
是的,這意味着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
的指針。