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

Sta*_*owl 1 c c++ msdn pointers

在此网站上:Windows数据类型

出现了这个话题的问题.

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

有人知道这个背景吗?

alk*_*alk 8

引用" 长指针 "(LP-types):

那里有时间(奔腾前),你有长短指针.由于WINAPI在那段时间内已经存在,而今天仍然试图与那些日子的代码保持兼容,所以LPsomething-types幸免于难.

参考UINT_PTR:

这是一个足够宽的整数,用于保存指针的值.C11-Standard定义了如下类型:

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

1以下类型指定一个带符号的整数类型,其属性是任何有效的void指针都可以转换为此类型,然后转换回指向void的指针,结果将等于原始指针:

  intptr_t
Run Code Online (Sandbox Code Playgroud)

以下类型指定一个无符号整数类型,其属性是任何有效的void指针都可以转换为此类型,然后转换回指向void的指针,结果将等于原始指针:

  uintptr_t
Run Code Online (Sandbox Code Playgroud)

这些类型是可选的.

  • 长指针来自16位天,当你有段:偏移内存寻址时.长指针(也称为远指针)包括段和偏移.near指针仅包括段中的偏移量.它纯粹是英特尔x86架构的东西. (2认同)

And*_*ico 5

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