C语言 窗口中字符 * 和 LPSTR 之间的差异



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

LPSTR是一种

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

回到分段体系结构(旧的 64K 段,而不是较新的基于选择器的分段内存)的时代,您拥有微小、小型、中型、大型和大型内存模型,无论指针char *是什么类型,Windows 类型始终相同非常重要。

因此,如果您遵守了基础类型不同的不同编译器,则windows.h头文件将定义LPSTR来补偿这一点。

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

如今,对于 32+ 位平面模型,可能真的不需要这样的恶作剧,尽管它仍然可能发生在 64 位和 32 位代码之间切换之类的事情。尽管如此,当时定义的类型仍然存在,并且仍在大量使用。

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

来自维基教科书

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

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

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

最新更新