C言語C++言語初心者です。よろしくお願いします。


overload1.cpp
http://d.hatena.ne.jp/gbs01/20090502/1241259897

overload1b.cpp
http://d.hatena.ne.jp/gbs01/20090502/1241259898

上記二つのコードに関して教えていただきたいことがあります。

http://d.hatena.ne.jp/gbs01/20090502/1241259898
にある
int Input(int &i, double &d)
はどういう意味なのでしょうか?

http://d.hatena.ne.jp/gbs01/20090502/1241259898
にあるように
int Input(int *i, double *d)
としてはいけないのでしょうか?

overload1.cppとoverload1b.cppは同じ結果となりました。
どちらの書き方が正しいのでしょうか?
ご教授よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:2009/05/02 19:31:31
  • 終了:2009/05/03 19:27:27

ベストアンサー

id:AZUY No.2

AZUY回答回数343ベストアンサー獲得回数122009/05/02 21:33:08

ポイント35pt

C++から導入された仕様です

---

参照渡しという方法で引数を使用しています。仮引数の記述に注目して下さい。「int& num」となっています。ポインタ渡しであれば「int* num」ですが、記号が違います。参照の変数は、このように & を付けて表します。これはポインタの変数(ポインタ変数)を * を付けて表すのと同じことです。 & を付けた変数のことを参照変数、エイリアス 等といいます。変数のアドレスを表すときに使う & と同じ記号を使うので紛らわしいですが、参照のときに & を付けるのは、参照変数を宣言するときだけです。参照変数に値を代入するようなときには、何も付けません。

http://www.geocities.jp/ky_webid/cpp/language/015.html

これならわかるC++―挫折しないプログラミング入門 (ブルーバックス)
これならわかるC++―挫折しないプログラミング入門 (ブルーバックス)小林 健一郎

講談社 2001-05
売り上げランキング : 6218

おすすめ平均 star
star定評のある名著です。
starC++でオブジェクト指向を知る一冊
star「試してみたい人」&「中級者」向け.初心者が勉強するための本ではない.

Amazonで詳しく見る
by G-Tools

id:gbs01

ありがとうございます。

教えた頂いたサイトも参考になりました。

2009/05/03 19:13:31

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/05/02 20:56:54

ポイント35pt

* はポインタを、& はアドレスを意味します。

そして、このような渡し方を「参照渡し」と呼びます。


ポインタとアドレスの関係は下記のようになります。

int i, *j;
i = 100;
j = &i;

overload1.cppとoverload1b.cppとでは、Input関数の中で、ポインタ * を使うかどうかを変えることで、結果的に同じ事をしています。


どちらが正しいかというご質問ですが、C言語でできる参照渡しは *i だけ、C++でできる参照渡しは &i というルールになっています。処理系によってはどちらでもできるものもありますが、このルールに則った方がいいかと思います。

id:gbs01

ありがとうございます。

2009/05/03 19:12:54
id:AZUY No.2

AZUY回答回数343ベストアンサー獲得回数122009/05/02 21:33:08ここでベストアンサー

ポイント35pt

C++から導入された仕様です

---

参照渡しという方法で引数を使用しています。仮引数の記述に注目して下さい。「int& num」となっています。ポインタ渡しであれば「int* num」ですが、記号が違います。参照の変数は、このように & を付けて表します。これはポインタの変数(ポインタ変数)を * を付けて表すのと同じことです。 & を付けた変数のことを参照変数、エイリアス 等といいます。変数のアドレスを表すときに使う & と同じ記号を使うので紛らわしいですが、参照のときに & を付けるのは、参照変数を宣言するときだけです。参照変数に値を代入するようなときには、何も付けません。

http://www.geocities.jp/ky_webid/cpp/language/015.html

これならわかるC++―挫折しないプログラミング入門 (ブルーバックス)
これならわかるC++―挫折しないプログラミング入門 (ブルーバックス)小林 健一郎

講談社 2001-05
売り上げランキング : 6218

おすすめ平均 star
star定評のある名著です。
starC++でオブジェクト指向を知る一冊
star「試してみたい人」&「中級者」向け.初心者が勉強するための本ではない.

Amazonで詳しく見る
by G-Tools

id:gbs01

ありがとうございます。

教えた頂いたサイトも参考になりました。

2009/05/03 19:13:31
  • id:Vacuum
    ① int Input(int *i, double *d)
    はC言語の記述方式です。
    int Input(int &i, double &d)
    ② はC++言語の記述方式です。

    結論からいえば、どちらも正しいです。

    関数の定義で引数に&を付けた場合は、値の参照渡しといわれるもので、呼び出し元の変数と同じレベルで呼び出し先がその変数を扱えるようになります。私はAIXやsolarisで商用業務アプリを組む場合に、必ずしもC++コンパイラでないことが多いので、①で記述することにしてますけど。


  • id:gbs01
    コメントありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません