(void **)&lpdd 如何理解?

来源:百度知道 编辑:UC知道 时间:2024/06/09 08:37:07
DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)
其中的参数(void **)&lpdd 怎么理解?

函数原型:

HRESULT WINAPI DirectDrawCreateEx(
GUID FAR *lpGUID,
LPVOID *lplpDD,
REFIID iid,
IUnknown FAR *pUnkOuter
);

此处LPVOID即VOID *类型(大写,微软惯用命名方式),也就是void *类型。
那么LPVOID *就是 void **了。
这里的lplpDD是指向“指向DirectDraw对象的指针”的指针(注意,有两个“指向”,因此他是指向指针的指针)。

楼主写的
DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)
里面,&lpdd与lplpDD是一个含义。为什么?
先来看看lpdd每个字母什么意思:
lp:微软惯用命名方式,英文为long pointer,即指针;
dd:DirectDraw简写。
那么lplpDD就是lpDD取地址,也就是&lpDD了(这里lplpDD是函数原型里的,lpdd是调用函数时的变量)

(void **)&lpdd
&lpdd的意思是取变量lpdd的地址.(void **)&lpdd再把所取的地址转变成空的二维地址,这时候,变量lpdd中存放的就是地址了.