C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のポインタ演算子*とは?間接参照演算子の基礎と使い方を解説

C++の2つのポインタ演算子

C++には、ポインタを操作するための演算子として、アドレス演算子(&)間接参照演算子(*)の2つが用意されています。

ポインタとは、別の変数のアドレス(メモリ上の場所)を格納する変数のことです。つまり、他の変数のアドレスを保持している変数は、その変数を「指し示している(ポイントしている)」と表現されます。ポインタが指し示す対象は、オブジェクトや構造体、さらにはポインタ自身を含む、あらゆるデータ型が可能です。

間接参照演算子(*)とは

間接参照演算子(*)は、アドレス演算子(&)と対になる演算子です。単項演算子の一種で、オペランドに指定されたアドレスに格納されている変数の値を返します。つまり、&が「変数からアドレスを取得する」のに対し、*は「アドレスから値を取り出す」という逆の働きをします。

サンプルコード

#include <iostream>
using namespace std;
int main () {
    int  var;
    int  *ptr;
    int  val;
    var = 3000;

    // varのアドレスを取得してptrに代入
    ptr = &var;

    // ptrが指し示す先の値を取得してvalに代入
    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

この例では、変数varに3000を代入し、&演算子でそのアドレスをポインタptrに格納しています。さらに、*演算子を使ってptrが指し示すアドレスの値を取り出し、変数valに代入しています。その結果、valにはvarと同じ3000が格納されていることが確認できます。なお、ptrに出力されるアドレス値(0xbff64494)は、実行環境や実行のたびに異なる場合があります。

まとめ

アドレス演算子(&)と間接参照演算子(*)は、互いに補完関係にある演算子です。&で変数のアドレスを取得し、*でそのアドレス先の値を参照する、この2つの操作を組み合わせることが、C++におけるポインタ操作の基本となります。

  1. C++のsizeof演算子とは?基本構文と使い方を実例付きで解説

    sizeof はC++のキーワードであると同時に、コンパイル時に評価される演算子でもあります。変数やデータ型が必要とするメモリのサイズをバイト単位で取得するために使用され、プログラムの実行時ではなくコンパイルの時点でその値が確定する点が特徴です。sizeof演算子は、int や double などの組み込み型だけでなく、クラス・構造体・共用体などユーザー定義のデータ型に対しても使用できます。sizeofの基本構文sizeof (data type)「data type」の部分には、サイズを調べたいデータ型や変数名を指定します。例えば、char 型のオブジェクトに適用した場合は必ず 1 を返しま

  2. C++のvolatileキーワードとは?意味と役割をわかりやすく解説

    volatileキーワードの基本的な意味C++におけるvolatileキーワードは、主に次の2つの重要な意味を持ちます。1. 変数の値は予告なく変化しうる(読み取り側の保証)volatile修飾された変数の値は、プログラマーが書いたコードによって変更されていなくても、いつでも変化する可能性があります。ハードウェアレジスタ、割り込み処理、別スレッドなどによって値が書き換えられるケースがこれに該当します。そのため、コンパイラはvolatile変数の値を読み取る際に、「前回読み取った値と同じはずだ」「直前に格納した値のままだ」といった仮定を行うことができません。必ずその都度、実際にメモリから値を再読