アドレス &

& (アドレス) 演算子は、そのオペランドを指すポインターを生成します。 オペランドは、左辺値、関数指定機能、または修飾名でなければなりません。オペランドは、ビット・フィールド であることも、ストレージ・クラス register を指定することもできません。

オペランドが左辺値または関数である場合は、結果の型は 式型を指すポインターです。例えば、式に型 int が指定されている場合、結果は、型 int が指定されたオブジェクトを指すポインターになります。

オペランドが修飾名で、メンバーが静的でない場合は、結果は、クラスのメンバーを 指すポインターになり、メンバーと同じ型になります。結果は、左辺値ではありません。

p_to_yint を指すポインターとして定義され、 yint として定義されている場合、 次の式では、変数 y のアドレスをポインター p_to_y に代入します。

p_to_y = &y;

Linux Mac OS X アドレス演算子は、AltiVec 言語拡張機能が使用可能になっている場合に、ベクトル型を処理するために拡張されました。 ベクトル型に適用されたアドレス演算子の結果は、 互換性のあるベクトル型へのポインターに保管することができます。初期化の両側が互換性のある型を持 つ場合、ベクトル型のアドレスを、ベクトル型へのポインターを初期化するために使用することができます。 void へのポインターも、ベクトル型のアドレスで初期化することができます。

C++このセクションでのここから先の説明は、C++ だけに適用されます。

アンパーサンド記号 & は、C++ では、アドレス演算子としてばかりでなく、参照宣言子とし ても使用され ます。これらの意味は関連性がありますが、同じではありません。

int target;
int &rTarg = target;  // rTarg is a reference to an integer.
                      // The reference is initialized to refer to target.
void f(int*& p);      // p is a reference to a pointer

これは、参照のアドレスを取得した場合にそのターゲットのアドレスを戻します。 直前の宣言を使用して、&rTarg&target と同じメモリー・アドレスとなります。

レジスター変数のアドレスを取ることができます。

使用する多重定義関数のバージョンを、左側が固有に判別する初期化または代入の場合に限り 、多重定義関数で & 演算子を使用することができます。

ラベルのアドレスは、GNU C アドレス演算子 && を使用して取得することができます。これによりラベルを値として使用することができます。

関連参照

IBM Copyright 2003