如果这是一个基本的或愚蠢的问题,我道歉。char*和LPSTR有什么不同。其中sizeof在我的编译器中都提供了4个字节。有没有人能详细解释一下。谢谢..
发布于 2012-08-14 13:02:07
LPSTR是一种Windows类型,无论你在什么平台上编译,它都应该是相同的。它是一个指向字符串的长指针。
回到分段体系结构的时代(旧的64K段,而不是新的基于选择器的分段内存),当你有小的、小的、中的、大的和巨大的内存模型时,重要的是窗口类型总是相同的,无论指针char *是什么类型。
因此,如果您遵循底层类型不同的不同编译器,windows.h头文件将定义LPSTR来补偿这一点。
例如,Borland C可能有一个16位的char *,而LPSTR可能必须为它定义为far char *。在编译器中,char *已经是一个长指针/远指针,LPSTR会直接使用它。
如今,对于32+位平面模型,可能没有真正需要这样的恶作剧,尽管它仍然可能发生在64位和32位代码之间的突击。尽管如此,在那里定义的类型仍然与我们在一起,并且仍然在使用中。
发布于 2012-08-14 13:00:46
基本上,LP*指针表示在Windows的16位版本上使用32位指针:
来自WikiBooks
字母"LP“或前缀"lp”代表“长指针”,这与32位机器上的常规指针完全相同。LP数据对象只是从Windows 3.1或更高版本继承下来的遗留对象,当需要区分指针和长指针时。在现代32位系统中,这些前缀可以互换使用。
发布于 2012-08-14 13:00:11
这种差异埋藏在时间的深处。LPSTR代表“指向字符串的长指针”。回到32位处理器出现之前,指向内存的指针可能位于不同的内存段(想想,很远的内存),需要额外的空间来存储。
在32位(以及更高版本)的处理器上,它们是完全相同的。微软使用LPSTR完全是出于历史原因。
https://stackoverflow.com/questions/11945990
复制相似问题