windows中char *和LPSTR的区别

问题描述 投票:0回答:3

如果这是一个基本或愚蠢的问题,我深表歉意。

char*
LPSTR
有什么区别。其中
sizeof
在我的编译器中都给出了 4 个字节。有人能给我详细解释一下吗。谢谢..

c windows winapi visual-c++
3个回答
26
投票

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

回到分段架构时代(旧的 64K 分段,而不是较新的基于选择器的分段内存),那里有微型、小型、中型、大型和巨型内存模型,Windows 类型始终相同非常重要,无论指针

char *
是什么类型。

因此,如果您使用底层类型不同的不同编译器,则

windows.h
头文件将定义
LPSTR
来弥补这一点。

例如,Borland C 可能有一个 16 位

char *
,并且
LPSTR
可能必须定义为
far char *
。在
char *
已经是长/远指针的编译器中,
LPSTR
会直接使用它。

如今,对于 32 位以上的平面模型,可能不再需要这样的恶作剧,尽管在 64 位和 32 位代码之间进行 thunking 之类的事情“可能”仍然会发生。尽管如此,当时定义的类型仍然存在,并且仍在广泛使用。


9
投票

来自

WikiBooks

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


5
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.