C++ ポインタ演算子(& および *)
C++ には2つのポインタ演算子があります。1つはアドレス演算子 &、もう1つは間接参照演算子 * です。
ポインタは別の変数のアドレスを含む変数です。別の変数のアドレスを含む変数は、別の変数を「指す」と言えます。変数は、オブジェクト、構造体、ポインタなど、任意のデータ型にすることができます。
アドレス演算子 &
& は単項演算子で、オペランドのメモリアドレスを返します。例えば、var が整数型変数の場合、&var はそのアドレスです。この演算子は他の単項演算子と同じ優先順位を持ち、演算時には右から左へ順に評価されます。
& 演算子は次のように読めます「アドレス演算子」つまり、&var「var のアドレス」と読みます。
間接参照演算子 *
2つ目の演算子は間接参照演算子 * で、& 演算子の補完です。* は単項演算子で、オペランドが指定するアドレスにある変数の値を返します。
次の例を見て、これら2つの演算子の使い方を理解してください。
例
#include <iostream>
using namespace std;
int main ()
{
int var;
int *ptr;
int val;
var = 3000;
// var のアドレスを取得
ptr = &var;
// ptr の値を取得
val = *ptr;
cout << "Value of var :" << var << endl;
cout << "Value of ptr :" << ptr << endl;
cout << "Value of val :" << val << endl;
return 0;
}
using namespace std;
int main ()
{
int var;
int *ptr;
int val;
var = 3000;
// var のアドレスを取得
ptr = &var;
// ptr の値を取得
val = *ptr;
cout << "Value of var :" << var << endl;
cout << "Value of ptr :" << ptr << endl;
cout << "Value of val :" << val << endl;
return 0;
}
上記のコードがコンパイルおよび実行されると、次の結果が生成されます:
Value of var :3000 Value of ptr :0xbff64494 Value of val :3000その他の拡張