簡體   English   中英

即使未使用指向指針的指針作為參數來調用函數,為什么仍能正常工作?

[英]Why does this work even though the function is not called with a pointer to a pointer as a parameter?

在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_pBitmapID2D1Bitmap* ,則使用&取得它的地址時,您將獲得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使指針指向該指針。

傳遞指針的地址會使參數指針指向完全​​屬於該類型的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM