2013-03-12 41 views
0

在从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对象的指针?

回答

4

请注意,传递的参数不是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使指针指向指针。

0

传递一个指针的地址会使参数指针指向正好是类型的指针。

相关问题