LPVOID和void之间的区别*

时间:2010-01-01 05:32:22

标签: c

我可以在C中使用void*代替LPVOID吗?

LPVOID执行一些特殊功能而不是void*

4 个答案:

答案 0 :(得分:87)

C中没有LPVOID类型,它是Windows的东西。

这些事情存在的原因是底层类型可以在不影响源代码的情况下从发行版更改为发布版。

例如,假设早期版本的Microsoft C编译器有一个16位int和一个32位long。他们可以简单地使用:

typedef long INT32

,瞧,你有32位整数类型。

现在让我们继续几年,直到Microsoft C使用32位int和64位long。为了使您的源代码功能正常,他们只需将typedef行更改为:

typedef int INT32

这与您在32位整数类型中使用long时必须执行的操作形成对比。您必须通过所有源代码并确保更改自己的定义。

从兼容性角度(不同版本的Windows之间的兼容性)使用Microsoft的数据类型更清晰。

在回答您的具体问题时,如果不希望 void* 的定义,则可以使用LPVOID代替LPVOID 变化。

但我不会,以防万一。你永远不知道微软是否会在未来引入一些处理通用指针的不同方式来改变LPVOID的定义。使用Microsoft的类型并没有真正失去任何东西,但如果他们改变了定义并且您决定使用基础类型,那么可能将来需要做一些工作。

您可能认为指针不会受到这种变化的影响,但是,在创建Windows的最初的8088天中,指针和内存模型(微小的,大的,巨大的等等)存在各种各样的奇怪现象。即使在同一环境中也允许指针具有不同的大小。

答案 1 :(得分:10)

LPVOID只是typedef的Windows API void*

答案 2 :(得分:2)

LPVOID是

typedef void* LPVOID

Windef.h中定义,其中定义了每个windows数据类型。

我们可以使用void *指向任何类型。

答案 3 :(得分:-1)

LPVOID是指向任何类型的指针。 此类型在WinDef.h中声明如下: typedef void * LPVOID;