2

次のコンストラクタがあります。

MutexWrapper::MutexWrapper(Mutex * pMutex)
{
  DebugPrint("0x%x", pMutex); // displays 0x1f83e54
}

そして、次の関数で呼び出されます。

void OnReviewBuffer_Callback( void * pUserData )
{
  ReviewBuffer * thePointer = (ReviewBuffer *) pUserData;

  DebugPrint("0x%x", thePointer); // this displays 0x1f83e48

  MutexWrapper theMutexWrapper(thePointer);
}

残念ながら、ReviewBuffer- の完全な定義を提供することはできませんが、以下で十分であることを願っています。

class ReviewBuffer  : public StreamConsumer_Base, public Mutex
{
  ...
};

問題は、出力するthePointerと が得られることです0x1f83e48が、コンストラクター内から出力される値は です0x1f83e54

ポインターの値が異なるのはなぜですか?これは、ポインターのコピーを渡す値渡しに関係していますか?

4

3 に答える 3

-1

Java と同様に C++ では、ポインターは値渡しされます。参照渡しは誤称です。

もちろん、同じアドレス変数を指しているポインタは、全体が参照渡しされているように見えますが、そうではありません。

于 2013-05-20T15:14:06.217 に答える