第6章 エイリアス


Cで次のようなプログラムを考えます。

//Cのプログラム alias.c #include <stdio.h> int main(void) { int *p, a = 10; p = &a; printf("*p = %d\n", *p); return 0; }

ま、これはポインタのごく簡単な使い方を示した サンプルプログラムです。ここで、pはint型への ポインタです。*pとaは同じものを表しています。 つまり、aという記憶領域に*pという「別名」が ついたと考えられます。これを*pはaのエイリアス(alias) といいます。aliasとは「別名」とか「あだ名」という意味の 英語です。そういえばMacで、デスクトップに置くアイコンも 確か「エイリアス」と呼んでいたと思います。プログラムの本体が デスクトップにあるわけではなく、本体を呼び出すためのあだ名 という意味でしょうか?Windows95でいえば、ショートカットですね。

あ、いかん!

前置きが長くなってしまった。今説明したのは、 C言語でのエイリアスです。この章で解説したいのは もう少し別な意味でのエイリアスです。これから解説する エイリアスは、C++でしか使えないので注意してください。 まずは、例を見てください。

まず、普通にint型変数aを宣言します。 次にaのエイリアスaliasを宣言し、同時に初期化します。 同時に初期化するというのがミソです。

int a; int &alias; &alias = a;

というようにはできません。 このままコンパイルすると「参照が初期化されずに宣言されています。」 というエラーが出ます。参照とは、「&」演算子を付けて表します。 そして、宣言と同時に初期化されるとあとは参照される変数と 全く同じに扱えます。ところで、この演算子はポインタのところでやった 「アドレス演算子」と同じですね。どうやって区別したらよいのでしょうか。

参照の場合は、「&」の前に、データ型の名前が来る

と、覚えておきましょう。

さて、C言語編で次のようなプログラム を紹介しました。

//どんな本にでも載っているCプログラム #include <stdio.h> void change_data(int *, int *); int main(void) { int x = 10, y = 5; printf("x=%d, y=%d\n", x, y); printf("データを交換します。\n"); change_data(&x, &y); printf("x=%d, y=%d\n", x, y); return 0; } void change_data(int *a, int *b) { int c; c = *a; *a = *b; *b = c; return; }

main関数で、変数x,yのデータを入れ替える change_data関数を呼び出しています。 この時呼ばれる側の関数では、呼び出し側の変数の アドレスをもらっています。Cでは、このようにしないと 呼び出し側の変数は変更できませんでした。 では、先ほどやった「参照」を使って書き換えてみましょう。

change_data関数では、引数に「参照」を使っています。 こうすることにより、元の変数を変更することができます。

はい、このとおり!

でも、こういう使い方はよくない!

とされています。「関数側でパラメータを変更するとき は、ポインタによる引き渡しを使う」というようなことが 暗黙のうちに決められているようです。 参照の使い方は、後の章で少しずつ小出しに説明していきます。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Jan/05/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。