【发布时间】:2014-05-09 15:04:31
【问题描述】:
在这个网站上:Windows Data Types
话题的问题出现了。
LP 代表我认为的长指针 - 但没有长指针。 UINT_PTR 代表我再次假设的无符号整数指针 - 但没有指针。
有人知道这件事的背景吗?
【问题讨论】:
-
你的问题很矛盾。
在这个网站上:Windows Data Types
话题的问题出现了。
LP 代表我认为的长指针 - 但没有长指针。 UINT_PTR 代表我再次假设的无符号整数指针 - 但没有指针。
有人知道这件事的背景吗?
【问题讨论】:
引用“长指针”(LP-types):
您曾经拥有long and short pointers 的时间(奔腾之前)。由于 WINAPI 在那个时代已经存在,并且今天仍然试图保持与那个时代的代码兼容,LPsomething-types 得以幸存。
转介UINT_PTR:
这是一个足够宽的整数来保存指针的值。 C11-Standard 对这样的类型进行了如下定义:
7.20.1.4 能够保存对象指针的整数类型
1 以下类型指定一个有符号整数类型,其属性是任何有效的 指向 void 的指针可以转换为这种类型,然后再转换回指向 void 的指针, 结果将等于原始指针:
intptr_t以下类型指定一个无符号整数类型,其属性是任何有效的 指向 void 的指针可以转换为这种类型,然后再转换回指向 void 的指针, 结果将等于原始指针:
uintptr_t这些类型是可选的。
【讨论】:
UINT_PTR 不是指针类型。它是一个无符号整数类型,其宽度足以存储指针值(因此其宽度取决于目标平台)。它的存在是因为int 和unsigned int 的宽度不一定足以容纳一个指针(尤其是在x64 的Windows 上int 仍然是32 位而指针是64 位)。
【讨论】: