如果这是一个基本或愚蠢的问题,我道歉。 char*
和LPSTR
之间有什么区别?其中sizeof
都在我的编译器中提供了4个字节。有人可以详细解释我。谢谢..
答案 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位指针:
字母“LP”或前缀“lp”代表“长指针”,其中 与32位机器上的常规指针完全相同。 LP数据 对象只是从Windows继承的旧对象 3.1或更高版本,当指针和长指针需要区分时。在现代32位系统上,可以使用这些前缀 互换。
答案 2 :(得分:3)
差异在时间的深处埋葬。 LPSTR代表“指向字符串的长指针”。回到32位处理器之前,指向内存的指针可能位于不同的内存段(想想,内存中很远),需要额外的空间来存储。
在32位(及更高版本)处理器上,它们完全相同。 Microsoft仅出于历史原因使用LPSTR。