什么是PVOID数据类型?

时间:2009-01-30 01:22:11

标签: c++ pointers com

有人可以解释PVOID是什么以及如何在以下函数中使用它:

BOOL DoSomething(PVOID pMemPhy)

6 个答案:

答案 0 :(得分:21)

void指针,与

相同
void *pMemPhy

又名“指向某事物的指针,但这取决于你解决问题”。

BOOL DoSomething ( PVOID pMemPhy )
{
    strcpy((char *)pMemPhy, "I love buffer overflows!");
    return TRUE;
}

答案 1 :(得分:12)

它是一个 void指针 - 指向内存地址的指针,没有关于它指向的值类型的信息。因此,在使用指针之前必须将指针强制转换为(char *)pMemPhy(int *)pMemPhy这样的类型,以便编译器知道它使用了多少内存(char为1个字节,4个字节为一个int等。)

答案 2 :(得分:4)

typedef void * PVOID;

如果您有疑问是什么用途是无效指针?最常见的用途是当你将指针传递给并不真正关心类型的内存时。例如,free()。​​

如果一个库导出一个可以采用多种指针类型的函数,但是想要支持没有函数重载的C这样的语言,那么void *可以工作。

答案 3 :(得分:4)

正如其他人所说,它相当于void *

void指针通常用于内存操作(memcpymemset等...),因为人们不想假定给定地址的数据类型。

来自thishttp://cplusplus.com文章中的指针和无效指针得到了很好的处理。

答案 4 :(得分:4)

这个和其他助记符如BOOL,LPCTSTR源于Windows,BTW是在C标准存在之前开发的,并且不依赖于特定的编译器它使用自己的类型。

您可以查看Old New Thing博客,了解有关Windows开发历史的更多故事,以及它们将留给我们的奇怪之处(http://blogs.msdn.com/oldnewthing)。

答案 5 :(得分:1)

听起来它只是void *的别名(define或typedef)。我不知道为什么人们认为会更好,但我知道有些API喜欢使用它,以防将来类型的实现发生变化。

我知道早期版本的Windows使用STDCALL之类的东西作为许多函数的前缀,而STDCALL的定义可能会根据您编译的Windows版本而改变。这是来自记忆(多年后受酒精影响:-),所以不要依赖于此作为福音。它基本上是正确的,但细节可能会有所不同。