• ベストアンサー

C++でパラメータのやり取りでわからないことが・・・

C++で引数に (.... &a)にように&が付いている場合が有るのですが これはどういう意味でしょうか? *aなら 引数で渡すときにポインタを渡せば(例えば int x; y(&x)) 良いと思いますが、&a)の引数に対してどのように渡せば良いのでしょうか? いっそのこと、構造体にして構造体のポインタを渡す方が様々な値を気にせずやり取りできるかなと感じたのですが、パラメータのやり取りで、一番スマートな手法は何なのでしょうか?

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

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.3

意味は既に回答にある通りですが、&が可能な場合はその方がより安全です。可能な限り使った方がいいと思ってます。 例えば、こんなケースが防げます。 int *ip=NULL; f(ip); void f(int *ip) *ip=1; とか int *ip=&i1; f(ip) void f(int *ip) ip++; *ip = 1; スマートな方法はやはりケースバイケースですね。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

引数の参照渡し (call by reference) ですね. 例えば 2つの変数の値を入れ替えたい場合に, C では void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } としなければならないところ, C++ では参照渡しを使って void swap(int &a, int &b) { int t = a; a = b; b = t; } のように定義することができます. 使うときも, C では void foo() { int a = 3, b = 5; swap(&a, &b); } としなければならないのに対し C++ で参照渡しを使っていれば void foo() { int a = 3, b = 5; swap(a, b); } と書くことができるようになります. パラメータの渡し方で*どんな場合でも*スマートと言える方法はないんじゃないですかね. 構造体を使えば確かに関数呼出しそのものはスマートになりますが, パラメータが異なるごとに構造体を定義しなければならないですし, 構造体に値を設定しなければならないのでそこまで含めて見るとスマートとは言えないこともあります. まあ, 常に連携していなければならないパラメータであれば構造体 (or クラス) を使いのが常道ではありますが.

  • nagare
  • ベストアンサー率33% (280/831)
回答No.1

>C++で引数に (.... &a)にように&が付いている場合が有るのですがこれはどういう意味でしょうか? 変数aのアドレス(ポインタ)を引数にしています >*aなら 引数で渡すときにポインタを渡せば(例えば int x; y(&x))良いと思いますが、&a)の引数に対してどのように渡せば良いのでしょうか? aの宣言で変わります long a なら (.... &a) long *a なら (.... a) 更に long *a で (.... *a) だと *aの実態がパラメタになります >いっそのこと、構造体にして構造体のポインタを渡す方が様々な値を気にせずやり取りできるかなと感じたのですが、パラメータのやり取りで、一番スマートな手法は何なのでしょうか? 構造体の先頭アドレスを渡すというのはよくやりますよ

関連するQ&A