LPCSTR没有'long'而UINT_PTR没有指针?

时间:2014-05-09 15:04:31

标签: c++ c pointers msdn

在本网站上:Windows Data Types

出现了这个话题的问题。

LP代表我认为的长指针 - 但是不久之后。 UINT_PTR代表我再次设定的无符号int指针 - 但是没有指针。

有人知道这个的背景吗?

2 个答案:

答案 0 :(得分:8)

参考" 长指针" (LP - 类型):

你有long and short pointers的地方(奔腾前)。由于WINAPI在这些时间已经存在,而且今天仍然试图与那些日子的代码保持兼容,LPsomething - 类型幸免于难。

参考UINT_PTR

这是一个足以容纳指针值的整数。 C11-Standard定义了如下类型:

  

7.20.1.4能够保存对象指针的整数类型

     

1以下类型指定带有任何有效属性的有符号整数类型   指向void的指针可以转换为这种类型,然后转换回指向void的指针,   并且结果将与原始指针进行比较:

  intptr_t
     

以下类型指定无符号整数类型,其属性为any   指向void的指针可以转换为这种类型,然后转换回指向void的指针,   并且结果将与原始指针进行比较:

  uintptr_t
     

这些类型是可选的。

答案 1 :(得分:5)

UINT_PTR不是指针类型。它是一个足够宽度的无符号整数类型,用于存储指针值(因此其宽度取决于目标平台)。它的存在是因为intunsigned int不一定足够宽以容纳指针(特别是在x64的Windows上,其中int仍为32位且指针为64位)。