Почему это работает, даже если функция не вызывается с указателем на указатель в качестве параметра?

В коде из 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?

0

Решение

Обратите внимание, что передаваемый аргумент не m_pBitmap, но &m_pBitmap,

Если m_pBitmap это ID2D1Bitmap* затем, когда вы берете адрес этого с &, вы получите ID2D1BitMap** — указатель на указатель, как ожидает функция.

4

Другие решения

Взятие адреса указателя делает его указателем на указатель.

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 делает указатель на указатель

2

Передача адреса указателя делает указатель параметра указателем, который в точности соответствует типу.

0
По вопросам рекламы [email protected]