今回はそれぞれの使いどころを見て行きます。
3つの方法の比較
それでは、 「値渡し」、「アドレス渡し」、「参照渡し」を比べてみます。
:
struct Person{
char name[32];
int age;
};
void PrintPersonReference(Person &psn); //参照渡し
void PrintPersonPointer(Person *psn); //アドレス渡し
void PrintPersonValue(Person psn); //値渡し
:
int main(void)
{
:
PrintPersonReference(person1); //参照渡しなので&を付けない
PrintPersonPointer(&person1); //アドレス渡しなので&を付ける
PrintPersonValue(person1); //値渡しなので&を付けない
:
これを見ていると、一つ問題がある事に気づきます。(^_^;)
参照渡しと値渡しは関数の呼び出し方法が全く同じなので
引数の値が変更されるかどうかわからないのです。(ーー;)
この問題を避けるために、関数の中で引数の値を変更するのは
「アドレス渡し」にするというルールにすると良さそうです。^^
このように、状況別に使い分ける事をおススメいたします。
関数側で引数を変更しない | 関数側で引数を変更する | |
int型など小さいデータを渡す | 値渡し | アドレス渡し |
構造体など大きいデータを渡す | constにした参照渡し | アドレス渡し |
今日の名言
弁護士になろうとしっかり心に決めれば、それだけで目的は半分達成されたも同然である。
きっと成功してみせる、と決心することが、何よりも重要だということを、常に暗記すべきだ。
エイブラハム・リンカーン
一度に一つずつ事を行え。あたかも自分の生死がそれにかかっているかのような気持ちで。
ユージン・グレース
事実を知れ-事実を抱き締めよ。すべてに基本は熱中である。
そして熱中は純真な心から生まれる。
ラルフ・ワルド・エマーソン
空気から歌は生まれない。自分が何を創造しつつあるか理解し、感じ取らねばならない。
アーヴィング・バーリン