20

如果这是一个基本或愚蠢的问题,我深表歉意。char*和有什么区别LPSTR。在我的编译器中sizeof两者都给出了 4 个字节。有人可以详细解释我。谢谢..

4

3 回答 3

24

LPSTR是一种Windows类型,无论您在什么平台上编译,都意味着相同。它是一个指向字符串的长指针。

回到分段架构的时代(旧的 64K 段,而不是新的基于选择器的分段内存),您有微型、小型、中型、大型和巨大的内存模型,重要的是 Windows 类型始终相同,不管是什么类型的指针char *

因此,如果您遵循底层类型不同的不同编译器,则windows.h头文件将定义LPSTR以弥补这一点。

例如,Borland C 可能有一个 16 位char *,并且LPSTR可能必须far char *针对它进行定义。在char *已经是长/远指针的编译器中,LPSTR将只使用它。

如今,对于 32 位以上的平面模型,可能没有真正需要这种恶作剧,尽管在 64 位和 32 位代码之间转换之类的事情仍然可能发生。尽管如此,那里定义的类型仍然存在,并且仍然在使用中。

于 2012-08-14T05:02:06.773 回答
9

基本上,LP* 指针用于指示在 16 位版本的 Windows 上使用 32 位指针:

来自维基书籍

字母“LP”或前缀“lp”代表“长指针”,与32位机器上的常规指针完全相同。当需要区分指针和长指针时,LP 数据对象只是从 Windows 3.1 或更高版本继承而来的遗留对象。在现代 32 位系统上,这些前缀可以互换使用。

于 2012-08-14T05:00:46.153 回答
5

差异隐藏在时间的深处。LPSTR 代表“指向字符串的长指针”。回到 32 位处理器之前,指向可能位于不同内存段(想想,在内存中很远)的内存的指针需要额外的空间来存储。

在 32 位(及更高版本)处理器上,它们完全相同。Microsoft 仅出于历史原因使用 LPSTR。

于 2012-08-14T05:00:11.217 回答