如果这是一个基本或愚蠢的问题,我深表歉意。char*
和有什么区别LPSTR
。在我的编译器中sizeof
两者都给出了 4 个字节。有人可以详细解释我。谢谢..
3 回答
LPSTR
是一种Windows类型,无论您在什么平台上编译,都意味着相同。它是一个指向字符串的长指针。
回到分段架构的时代(旧的 64K 段,而不是新的基于选择器的分段内存),您有微型、小型、中型、大型和巨大的内存模型,重要的是 Windows 类型始终相同,不管是什么类型的指针char *
。
因此,如果您遵循底层类型不同的不同编译器,则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。