В коде из 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?
Обратите внимание, что передаваемый аргумент не m_pBitmap
, но &m_pBitmap
,
Если m_pBitmap
это ID2D1Bitmap*
затем, когда вы берете адрес этого с &
, вы получите ID2D1BitMap**
— указатель на указатель, как ожидает функция.
Взятие адреса указателя делает его указателем на указатель.
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
делает указатель на указатель
Передача адреса указателя делает указатель параметра указателем, который в точности соответствует типу.