Windows中char *和LPSTR之间的区别

时间:2012-08-14 04:54:47

标签: c windows winapi visual-c++

如果这是一个基本或愚蠢的问题,我道歉。 char*LPSTR之间有什么区别?其中sizeof都在我的编译器中提供了4个字节。有人可以详细解释我。谢谢..

3 个答案:

答案 0 :(得分:19)

LPSTR Windows 类型,无论您编译的是哪个平台,都应该是相同的。它是一个指向字符串的长指针。

回到分段架构(旧的64K段,而不是新的基于选择器的分段存储器)的时代,你有小型,小型,中型,大型和大型内存模型,重要的是Windows类型总是同样,无论指针char *是什么类型。

因此,如果您遵守基础类型不同的不同编译器,windows.h头文件将定义LPSTR以补偿它。

例如,Borland C可能有一个16位char *,而LPSTR可能必须被定义为far char *。在char *已经是长/远指针的编译器中,LPSTR只会使用它。

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

答案 1 :(得分:7)

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

来自WikiBooks

  

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

答案 2 :(得分:3)

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

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