Menu
Coddy logo textTech

ポインタと配列

CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 5/56。

C++において、配列とポインタには特別な関係があります。配列を宣言すると、配列名は実際にはその配列の最初の要素へのポインタとして機能します。この関係により、ポインタを使用して強力な方法で配列を操作できるようになります。

次の配列の宣言を考えてみましょう:

int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers;  // ptr は numbers[0] を指すようになります

ここで、numbers&numbers[0] と同等です。どちらも最初の要素のアドレスを返します。ポインタ ptr は現在、同じ場所を指しています。

配列へのポインタを取得したら、ポインタ演算を使用して要素間を移動できます。ポインタに1を加算すると、同じ型の次の要素に移動します。

ptr++;        // numbers[1] を指すようになります
ptr = ptr + 2; // numbers[3] を指すようになります

任意の位置でポインタをデリファレンスして値にアクセスできます。*ptr は現在の位置の値を返し、*(ptr + 1) は次の要素の値を返します。

このポインタと配列の関係により、従来のインデックスベースのループの代わりにポインタを使用して配列を反復処理できるようになり、配列の走査に対する代替のアプローチが提供されます。

challenge icon

チャレンジ

簡単

ポインタを使用して配列を反復処理し、各要素を出力するプログラムを作成して、ポインタと配列の関係を実証してください。

以下の配列が提供されています:

int values[6] = {15, 23, 8, 42, 17, 31};

プログラムは以下の手順で行う必要があります:

  1. values 配列の最初の要素を指す ptr という名前のポインタを作成します
  2. ポインタ演算を使用して、配列の全6要素を反復処理します
  3. 各位置でポインタをデリファレンスして、各要素を出力します
  4. ポインタ演算を使用して、ポインタを次の要素に移動させます(ポインタをインクリメントします)

各要素を以下の形式で個別の行に出力してください:

Element: [value]

出力は、配列のインデックスではなく、ポインタのデリファレンスを通じてアクセスされた、配列に現れる順序通りの全6要素を表示する必要があります。

チートシート

配列名は最初の要素へのポインタとして機能します。配列名を直接ポインタに代入することができます:

int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers;  // ptr は numbers[0] を指します

ポインタ演算を使用して配列要素間を移動します:

ptr++;        // 次の要素へ移動
ptr = ptr + 2; // 2要素分進む

ポインタをデリファレンスして値にアクセスします:

*ptr          // 現在の要素の値
*(ptr + 1)    // 次の要素の値

これにより、インデックスベースのループの代わりに、ポインタベースの配列走査が可能になります。

自分で試してみよう

#include <iostream>
using namespace std;

int main() {
    // 指定された配列
    int values[6] = {15, 23, 8, 42, 17, 31};
    
    // TODO: 配列の最初の要素を指す 'ptr' という名前のポインタを作成してください
    
    // TODO: ポインタ演算を使用して、ループで全6要素を反復処理してください
    // TODO: ポインタをデリファレンスして各要素を表示してください
    // TODO: ポインタ演算を使用して、ポインタを次の要素に移動させてください
    
    return 0;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理と制御フローのすべてのレッスン