【C++】配列とポインタを解説

配列画像 C++基礎

この記事では、C++の配列とポインタについて学びます。配列の宣言と使用方法、ポインタの基本(アドレス演算子、デリファレンス)、配列とポインタの関係、そしてポインタ演算について詳しく解説します。

  • 配列は、同じ型の複数の値を一連の連続したメモリ領域に格納するためのデータ構造です。
  • ポインタは、メモリの特定のアドレスを指す変数です。
  • 配列の名前はその配列の最初の要素のアドレスを指すポインタとして使用できます。
  • ポインタ演算では、ポインタに整数を加算または減算して、メモリ上の他の位置を指す新しいポインタを作成できます。

これらの概念を理解することで、データの効率的な管理と操作が可能になり、より複雑でパワフルなプログラムを作成することができます。

プログラムを実行するための環境構築がまだの方は「C++を実行するための環境構築|初心者でも簡単!(Windows)」をご覧ください。

配列の宣言と使用方法

配列は同じ型の複数の変数を一つの名前で管理するためのデータ構造です。配列は次のように宣言します。

#include <iostream>

int main() {
    int array[5] = {1, 2, 3, 4, 5}; // 配列の宣言と初期化
    for(int i = 0; i < 5; i++) {
        std::cout << array[i] << "\n"; // 配列の要素を出力
    }
    return 0;
}

実行結果:

1
2
3
4
5

ここで、int array[5] は、整数型の要素を5つ持つ配列を宣言しています。そして、array[i] で配列の各要素にアクセスしています。

配列のインデックスは0から始まることに注意してください。

ポインタの基本(アドレス演算子、デリファレンス)

ポインタは変数のアドレスを格納するための特殊な変数です。アドレス演算子(&)を使って変数のアドレスを取得し、デリファレンス(*)を使ってポインタが指すアドレスの値を取得します。

#include <iostream>

int main() {
    int x = 10;
    int* p = &x; // ポインタpにxのアドレスを代入

    std::cout << "xの値: " << x << "\n";
    std::cout << "xのアドレス: " << &x << "\n";
    std::cout << "pの値(=xのアドレス): " << p << "\n";
    std::cout << "*pの値(=xの値): " << *p << "\n";

    return 0;
}

実行結果:

xの値: 10
xのアドレス: 0x7ffeefbff5ac
pの値(=xのアドレス): 0x7ffeefbff5ac
*pの値(=xの値): 10

ここで、int* p = &x; は、変数xのアドレスをポインタ p に代入しています。そして、*p でポインタ p が指すアドレスの値、つまりxの値を取得しています。

※アドレス:0x7ffeefbff5acは実行ごとに異なる数値になります。

ポインタを使うことで、変数のアドレスを直接操作することができます。

配列とポインタの関係

配列とポインタは密接な関係があります。配列の名前はその配列の最初の要素のアドレスを指すポインタとして振る舞います。

#include <iostream>

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    int* p = array; // 配列の名前は最初の要素のアドレスを指す

    for(int i = 0; i < 5; i++) {
        std::cout << *(p + i) << "\n"; // ポインタ演算を使って配列の要素を出力
    }

    return 0;
}

実行結果:

1
2
3
4
5

ここで、int* p = array; は、配列の最初の要素のアドレスをポインタpに代入しています。そして、*(p + i) でポインタ演算を使って配列の各要素にアクセスしています。

このように、配列とポインタを組み合わせることで、より柔軟なデータ操作が可能になります。

ポインタ演算

ポインタに整数を加えることで、ポインタが指すアドレスを移動させることができます。これをポインタ演算と呼びます。

#include <iostream>

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    int* p = array;

    p += 2; // ポインタを2つ分進める
    std::cout << *p << "\n"; // 3番目の要素を出力

    return 0;
}

実行結果:

3

ここで、p += 2; は、ポインタpが指すアドレスを2つ分進めています。そして、*p で新しいアドレスの値、つまり配列の3番目の要素を出力しています

ポインタ演算を使うことで、配列の任意の位置に効率的にアクセスすることができます。

まとめ

  • 配列は、同じ型の複数の値を一連の連続したメモリ領域に格納するためのデータ構造です。
  • ポインタは、メモリの特定のアドレスを指す変数です。
  • 配列の名前はその配列の最初の要素のアドレスを指すポインタとして使用できます。
  • ポインタ演算では、ポインタに整数を加算または減算して、メモリ上の他の位置を指す新しいポインタを作成できます。

これらの概念は初めて聞くと少し難しく感じるかもしれませんが、実際にコードを書いてみることで理解が深まります。ぜひ、提供したコードを自分で試してみてください。

配列とポインタは、C++の強力な機能の一部です。これらを理解し、適切に使用することで、効率的で柔軟なプログラムを作成することができます。

これからもC++の学習を頑張りましょう!

次のページ >> 【C++】クラスとオブジェクト指向プログラミングを解説

【C++】をより詳しく学びたい方はこちら >>【C++】入門書おすすめ3選!超初心者~中級者まで網羅!

プログラムを実行するための環境構築がまだの方は「C++を実行するための環境構築|初心者でも簡単!(Windows)」をご覧ください。

コメント

タイトルとURLをコピーしました