【问题标题】:Why does this work even though the function is not called with a pointer to a pointer as a parameter?为什么即使没有使用指向指针的指针作为参数调用函数,这也能工作?
【发布时间】:2013-03-12 16:52:03
【问题描述】:

在 MSDN 的代码中,有这样的:

HRESULT DemoApp::LoadBitmapFromFile(
    ID2D1RenderTarget *pRenderTarget,
    IWICImagingFactory *pIWICFactory,
    PCWSTR uri,
    UINT destinationWidth,
    UINT destinationHeight,
    ID2D1Bitmap **ppBitmap
    )

还有这个:

hr = LoadBitmapFromFile(
                m_pRenderTarget,
                m_pWICFactory,
                L".\\sampleImage.jpg",
                100,
                0,
                &m_pBitmap
                );

当 m_pBitmap 实际上是指向 ID2D1Bitmap 对象的指针 (ID2D1Bitmap *m_pBitmap) 而不是指向 ID2D1Bitmap 对象的指针时,它是如何工作的?

【问题讨论】:

    标签: c++ pointers bitmap msdn direct2d


    【解决方案1】:

    请注意,传递的参数不是m_pBitmap,而是&m_pBitmap

    如果m_pBitmapID2D1Bitmap*,那么当你用& 获取它的地址时,你会得到一个ID2D1BitMap** - 一个指向指针的指针,正如函数所期望的那样。

    【讨论】:

      【解决方案2】:

      获取指针的地址使其成为指向指针的指针。

      int i = 0;
      int *pi = &i // &i is the address of i (or a pointer to the int i)
      &pi // &pi is the address of pi (or a pointer to the pointer to i)
      

      所以,&m_pBitmap 生成了一个指向指针的指针。

      【讨论】:

        【解决方案3】:

        传递一个指针的地址,使参数指针指向与该类型完全相同的指针。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-25
          • 2014-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-31
          相关资源
          最近更新 更多