VOID、PVOID、LPVOID的区别及LP、P前缀含义解析
Windows API中VOID、PVOID、LPVOID的区别及前缀含义
前缀含义
- P:是英文Pointer的缩写,直接表示「指针」
- LP:是英文Long Pointer的缩写,这是16位Windows时代的遗留命名——当时系统区分近指针(Near Pointer,只能访问段内内存)和远指针(Long Pointer,可访问跨段内存)。但在32位/64位Windows系统中,内存模型已经统一,LP和P指代的指针没有任何区别
- 无前缀:代表基础数据类型本身
具体类型解析
VOID:对应标准C语言中的void,用于声明无返回值的函数,或是作为通用类型的占位符,本身不能用来定义变量(因为无类型)PVOID:等价于void*,是指向无类型的通用指针,可以安全转换为其他任何指针类型(无需强制转换,符合C语言标准)LPVOID:在16位系统中是远指针,但在现代32/64位Windows环境下,完全等价于PVOID(也就是void*),只是历史遗留的命名方式
实际使用说明
在当前的Windows开发中,PVOID和LPVOID功能完全一致,可以互换使用。老版本的Windows API函数中更常见LPVOID,而新的API或代码规范里可能更倾向于使用PVOID,但两者没有本质差异。
内容的提问来源于stack exchange,提问作者P4WN3R
相关产品推荐
相关产品推荐

