2012-04-10 25 views
2

私はこのC++の参照、アドレス、ポインタ

ClassName::Read(myObjectClass &temp) 

のように見える関数定義を参照してください私はこのようにそれを呼び出すようにしようとしている:

myObjectClass *myObj; 
ClassName::Read(&myObj); 

が、それは間違っています。それを呼び出す正しい方法は何ですか?

ClassName::Read(*myObj); 
+0

オブジェクト 'myObj'が呼び出し元の関数(new myObjectClassなど)で作成されていない場合、読み取りは未定義のアドレスに書き込むことに注意してください。 – guga

答えて

5

ジェームズが正しく指摘するように、正しい構文は*myObjである:それはこのようなタイプのmyObjectClass&

9

する必要があります。要するに、&myObjmyObjのアドレスを与えます。タイプはmyObjectClass**です。その代わりに逆参照myObjを入力して、myObjectClassのインスタンスを取得したいので、*を使用します。

ちなみに、現時点では、*myObjを使用すると、myObj自体が初期化されていないため、未定義の動作が発生します。動的な割り当てが必須である場合は、あなたが行うことができ、例えば

myObjectClass myObj; 
ClassName::Read(myObj); 

:あなたは動的myObjectClassを割り当てる必要がない場合は、単にこれをやったほうが良いかもしれません

myObjectClass *myObj = new myObjectClass; 
ClassName::Read(*myObj); 
//... 
delete myObj; 
0

この方法

myObjectClass myObj; 
ClassName::Read(myObj); 

あなたはどこにでもポインタと動的割り当てを使用する必要はありません。 C++はJavaではありません。