ポインタと配列
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) は次の要素の値を返します。
このポインタと配列の関係により、従来のインデックスベースのループの代わりにポインタを使用して配列を反復処理できるようになり、配列の走査に対する代替のアプローチが提供されます。
チャレンジ
簡単ポインタを使用して配列を反復処理し、各要素を出力するプログラムを作成して、ポインタと配列の関係を実証してください。
以下の配列が提供されています:
int values[6] = {15, 23, 8, 42, 17, 31};プログラムは以下の手順で行う必要があります:
values配列の最初の要素を指すptrという名前のポインタを作成します- ポインタ演算を使用して、配列の全6要素を反復処理します
- 各位置でポインタをデリファレンスして、各要素を出力します
- ポインタ演算を使用して、ポインタを次の要素に移動させます(ポインタをインクリメントします)
各要素を以下の形式で個別の行に出力してください:
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;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。