• ベストアンサー

関数宣言時の引数の*&はどういう意味なのでしょうか?

void Func(TestClass*& test){ … } というような記述を見かけたのですが、TestClassの後ろについている *&はどういう意味なのでしょうか? どういう理由があってつけられているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

まず参照渡しについてはわかっているでしょうか? これはTestClass*の参照渡しです。 void Func(int*& test) { test = new int; } int main() { int* p; Func(p); *p = 10; return 0; } こうすればFunc内部で、pをnewしています。 もし void Func(int* test) { test = new int; } なら pにnewされたアドレスは反映されません。 以下のコードでpとtestが同じ値であることが確認できます 「*&」を「*」に書き換えるとtestとpが違う値になるでしょう。 #include <iostream> void Func(int*& test) { test = new int; std::cout << test << std::endl; } int main() { int* p = NULL; Func(p); std::cout << p << std::endl; return 0; }

toshiaki33
質問者

お礼

なるほど!ありがとうございます。*&という記述は、 以下のように、ポインタを、参照宣言された引数に渡す際に、 わざわざポインタはずしをしなくてすむような便宜なのだと勘違いしておりました。 #include <iostream> void Func(int& intRef){ intRef = 3; } int main(void){ int* p = NULL; //ポインタを参照に変えなくちゃいけないのでポインタはずし Func(*p); std::cout << *p << std::endl; }

その他の回答 (1)

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.1

TestClass へのポインタのリファレンスですよね。 ポインタの値(ポインタが指しているものではなく、ポインタの値そのもの)を Func 内で書き換えて戻したいのではないですか? void Func(TestClass **ptest) { *ptest = 0; } void Func(TestClass *&test) { test = 0; } とか。

toshiaki33
質問者

お礼

ポインタのポインタのC++版だったのですね!ありがとうございます。 すっきりしました。

関連するQ&A