参照と言えば、まず一つの話をしましょう。私たちの住んでいる庭には、こういう小さな友達がいました。彼の名前は羅XXといいます。私たちは彼にあだ名をつけるのが好きです。彼を見ると栄養状態があまり良くなさそうで、頭が大きく体が小さいので、「大根頭」というあだ名をつけました。つまり、羅XXが彼の本名で、大根頭が彼の別名です。では、参照とは何でしょうか??

定義:参照:変数の別名です。

注:別名として、変数は別名だけを持ち、自分の本名を持たないということはできません。

基本データ型の参照

次のコードのようです:

例

#include <iostream> using namespace std; { int a = 3; int &b = a; //bはaの参照、つまりbはaの別名です。 //参照は初期化が必須です。そうしないとコンパイルエラーになります。 b = 10; cout<< a << endl; //このとき、aの値は元の3から10に変わっています。なぜなら、別名に対してどのような操作を行っても、実際には変数そのものに対する操作になるからです。まるで、私たちが大根頭に何かをするよう頼むと、羅XX自身がそれをするのと同じです。 return 0; }

構造体型の参照

次のコードのようです:

例

#include <iostream> using namespace std; //Coorという名前の構造体を定義します。これは座標です。 typedef struct { int x; int y; }Coor; int main(void) { Coor c1; //c1という構造体変数を定義します。 Coor &c = c1; //c1にcという別名をつけます。 c.x = 10; //参照を通じて構造体変数のデータメンバーに値を代入します。 c.y = 20; cout<< c1.x << c2.y; //出力結果:10 20 return 0; }

ポインタ型の参照

ポインタ型の参照は、参照の中でも最も複雑で理解しにくい部分であり、同時に記述形式にも独特な点があります。

定義:

型 *&ポインタ参照名 = ポインタ;

例を見てみましょう:

例

#include <iostream> using namespace std; int main(void) { int a = 10; //int型の変数aを定義します。aの値は10です。 int *p = &a; //変数aを指すポインタを定義します。 int *&q = p; //ポインタの参照を定義します。つまりqはpの別名です。定義方法:型 *&ポインタ参照名 = ポインタ; *q = 20; //20を*qに代入することは、20を*pに代入することに相当し、つまり20をaに代入することに相当します。 cout<< a << endl; //aの値として20が出力されます。 return 0; }

関数の引数としての参照

参照を学ぶ前に、C言語を学んだときに、次のような古典的なプログラムを学びました。

//2つの値を交換します。 void fun( int *a,int *b) //仮引数は2つのint型ポインタ変数です。 { int temp = 0; //一時変数を定義します。良い習慣として、変数を定義したら初期化します; c = *a; //*aをcに代入します; *a = *b; //*bを*aに代入します; *b = c; //そしてcを*bに代入します;これでa、bの値の交換が完了します。 } int x = 10,y = 20; fun(&x,&y); //メイン関数で呼び出すとき、渡す実引数は &a, &b と書く必要があり、面倒で理解しにくいです。

では、参照を学んだ今、同じ機能を実現するにはどのように書けばよいでしょうか?

例

void fun (int &a, int &b) //仮引数は2つのint型参照です。 { int temp = 0; temp = a; a = b; b = temp; } int x = 10,y = 20; fun(x,y); //メイン関数で呼び出すとき、実引数を渡すと、aはxの別名、bはyの別名になります。

原文アドレス:https://blog.csdn.net/stop_and_go/article/details/51334137