单纯讨论void**或void*的含义是没有意义的。和实际需要结合才行。

解决方案 »

  1.   

    void **是指向指针的指针,一般用来处理二维数组
    LPVOID是mfc定义的数据类型,指针是一个空类型,同void*
    例如
    int **ival;
    int i[3][3];
    ival=&i;
    *ival是指向i[0][0],也就是数组的第一个元素
    而ival是指向数组的第一列的第一个元素,ival+1就是指向数组第二列的第一个元素.
      

  2.   

    to  yu_hl(卖柴火的小男孩) 那上面的LPVOID * ppv是什么意思呢?
    或者麻烦你举一个使用void **的例子,
    分不够再加
      

  3.   

    比如:
    _Class1 *pClass = NULL;
    IUnknown *pUnk = NULL;
    HRESULT hr = CoCreateInstance(CLSID_Class1,NULL,CLSCTX_INPROC_SERVER,
          IID_IUnknown,(void **)&pUnk);
          hr = pUnk->QueryInterface(IID__Class1,(void **)&pClass);
          pUnk->Release();实际上是传一个指针的地址,在函数内部实现中,由于根据输入不同而返回的指针实际类型不同,只能用void**,而不能用[某类型]**来传入。
    用void**来传递指针地址是颇有争议的,因为这隐含着不安全因素。
      

  4.   

    to  yu_hl(卖柴火的小男孩) 
    明白了
    不过为什么不直接传递(void *) pUnk?而要搞成(void **)&pUnk 呢?
      

  5.   

    (void *) pUnk进去的还是形参,
    (void **)&pUn把pUn的地址传入。
      

  6.   

    因为函数内部是要改变punk的值的。所以要把它的地址传入。