C++ の配列 | 宣言 | 初期化 | 配列へのポインタの例

配列とは何ですか?

配列は、同じデータ型の要素を順番に格納するデータ構造です。 C++ 配列のサイズは固定です。

配列は、同様のデータ型の変数のコレクションとして見ることができます。 各変数を宣言して値を個別に割り当てる代わりに、XNUMX つの変数 (配列) を宣言し、そこにさまざまな変数の値を追加できます。 配列に追加された各値はインデックスによって識別されます。

なぜ配列が必要なのでしょうか?

配列 どのプログラミング言語においても非常に重要です。 これらは、変数または同様のデータ型のデータのコレクションを個別に保存するのではなく、一緒に保存するためのより便利な方法を提供します。 配列の各値は個別にアクセスされます。

C++ で配列を宣言する

C++ での配列の宣言には、配列に格納される要素の数だけでなく型の指定も含まれます。 構文:

type array-Name [ array-Size ];

C++ で XNUMX 次元配列を宣言するためのルール。

  • タイプ: 型は配列に格納される要素の型であり、有効な C++ データ型である必要があります。
  • 配列名: array-Name は、アレイに割り当てられる名前です。
  • 配列サイズ: array-Size は、配列に格納される要素の数です。 0 より大きい整数である必要があります。

たとえば、次のように age という名前の配列を作成し、5 人の生徒の年齢を保存できます。

int age[5];

配列 age には、さまざまな生徒の年齢を表す 5 つの整数が格納されます。

配列の初期化

配列の初期化は、要素を配列に割り当て/保存するプロセスです。 初期化は 0 つのステートメントで行うことも、1 つずつ行うこともできます。 配列内の最初の要素はインデックス XNUMX に格納され、最後の要素はインデックス n-XNUMX に格納されることに注意してください。ここで、n は配列内の要素の総数です。

age 配列の場合、最初の要素はインデックス 0 に格納され、最後の要素はインデックス 4 に格納されます。

age 配列を使用して、配列の初期化がどのように行われるかを示してみましょう。

int age[5] = {19, 18, 21, 20, 17};

{ } 内の要素の総数は、[ ] 内に記載された値を超えることはできません。 要素 19 はインデックス 0、18 はインデックス 1、21 はインデックス 2、20 はインデックス 3、17 はインデックス 4 にあります。 [ ] 内で配列に格納する要素の数を指定しない場合、配列は{ } 内に追加された要素を保持できる大きさのみになります。 例えば:

int age[] = {19, 18, 21, 20, 17};

上記のステートメントは、前のステートメントとまったく同じ配列を作成します。 インデックスを使用して XNUMX つの要素を配列に割り当てることもできます。 例えば:

age[3] = 20;

上記のステートメントは、age という名前の配列のインデックス 20 に値 3 を格納します。 つまり、20 が 4 になります。th 配列の要素。

配列の種類

C++ 配列には XNUMX つのタイプがあります。

  • 一次元配列
  • 多次元配列
  • 配列へのポインタ

XNUMX次元配列

これは、データ項目が 1 次元のみに直線的に配置された配列です。 これは一般に XNUMX 次元配列と呼ばれます。 構文:

datatype array-name[size];
  • array-name はアレイの名前です。
  • サイズは、配列に格納される項目の数です。

例:

#include <iostream>
using namespace std;

int main()
{
	int age[5] = { 19, 18, 21, 20, 17 };
	for (int x = 0; x < 5; x++)
	{
		cout <<age[x]<<"\n";
	}
}

出力:

XNUMX次元配列

コードのスクリーンショットは次のとおりです。

XNUMX次元配列

コードの説明:

  1. コードに iostream ヘッダー ファイルを含めます。 これにより、コンソールからの読み取りとコンソールへの書き込みが可能になります。
  2. std 名前空間を含めて、そのクラスと関数を呼び出さずに使用できるようにします。
  3. プログラムのロジックを追加する main() 関数を呼び出します。
  4. main() 関数の本体の開始。
  5. age という名前の配列を宣言して 5 つの整数を格納します。 5 つの整数も初期化されています。
  6. for ループを使用して整変数 x を作成します。
  7. for ループの本体の始まり。
  8. ループ変数 x を使用して配列 age の値を反復処理し、コンソールに出力します。 「\n」は改行文字であり、反復のたびに新しい行に出力されます。
  9. 本体の端 forループ.
  10. main() 関数の本体の終わり。

多次元配列

これは、データ項目が配列の配列を形成するように配置された配列です。 多次元配列には任意の次元数を含めることができますが、XNUMX 次元配列と XNUMX 次元配列が一般的です。 構文:

datatype array-name[d1][d2][d3]...[dn];

array-name は、n 次元を持つ配列の名前です。 例えば:

二次元配列

2D 配列は、1 次元配列のリストにデータを格納します。 これは行と列からなる行列です。 2D 配列を宣言するには、次のコマンドを使用します。wing 構文:

type array-Name [ x ][ y ];

型は有効な C++ データ型である必要があります。 2D 配列をテーブルとして参照します。x は行数を示し、y は列数を示します。 これは、a[x][y] の形式を使用して 2D 配列内の各要素を識別することを意味します。ここで、x は要素が属する行の数、y は列の数です。

2D 配列を初期化する方法の例を次に示します。

int a[2][3] = {  
   {0, 2, 1} ,   /*  row at index 0 */
   {4, 3, 7} ,   /*  row at index 1 */
   };

上の例では、2×2 行列として表示される 3D 配列があります。 2行3列あります。 要素 0 は、行インデックス 0 と列インデックス 1 の交点に位置するため、a[0][1] としてアクセスできます。要素 3 は、インデックス 1 の行とインデックス 2 の列の交差点。

要素の異なる行を区別するために中括弧を追加しただけであることに注意してください。 初期化は次のように行うこともできます。

int a[2][3] = {0, 2, 1, 4, 3, 7};
   };

次のことwing C++ の例は、2D 配列を初期化して走査する方法を示しています。

#include <iostream>
using namespace std;
int main() 
{
	// a 2x3 array
	int a[3][2] = { {0, 2}, {1, 4}, {3, 7} };

	// traverse array elements

	for (int i=0; i<3; i++)
		for (int j=0; j<2; j++) 
		
		{
			cout << "a[" <<i<< "][" <<j<< "]: ";
			cout << a[i][j] << endl;
		}
	return 0;
}

出力:

二次元配列

上記のコードのスクリーンショットは次のとおりです。

二次元配列

コードの説明:

  1. コードに iostream ヘッダー ファイルを含めます。 これにより、コンソールからの読み取りとコンソールへの書き込みが可能になります。
  2. std 名前空間を含めて、そのクラスと関数を呼び出さずに使用できるようにします。
  3. コードを追加する main() 関数を呼び出します。
  4. main() 関数の本体の開始。
  5. コメント。 C++ コンパイラはこれをスキップします。
  6. 2 行 3 列の 2D 配列を宣言します。 項目も配列に追加されました。
  7. コメント。 C++ コンパイラはこれをスキップします。
  8. for a ループを使用して変数 i を作成します。 この変数は、配列の行インデックスを反復処理します。
  9. for ループを使用して変数 j を作成します。 この変数は、配列の列インデックスを反復処理します。
  10. ループ本体の開始。
  11. 変数 i と j の値をコンソールの四角形の中に出力します。 brackets コンソールで。
  12. 配列 a のインデックス [i][j] に格納されている値を出力します。
  13. ループ本体の終わり。
  14. プログラムが正常に実行される場合、main() 関数は整数値を返すはずです。
  15. main() 関数の本体の終わり。

三次元配列

3D 配列は配列の配列です。 3D 配列内の各要素は、3 つのインデックスのセットによって識別されます。 3D 配列の要素にアクセスするには、XNUMX つの for ループを使用します。 例えば:

#include<iostream>
using namespace std;
void main()
{
	int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}};
	cout << "a[0][1][0] = " << a[0][1][0] << "\n";
	cout << "a[0][1][1] = " << a[0][1][1] << "\n";
}

出力:

三次元配列

コードのスクリーンショットは次のとおりです。

三次元配列

コードの説明:

  1. コードに iostream ヘッダー ファイルを含めます。 これにより、コンソールからの読み取りとコンソールへの書き込みが可能になります。
  2. std 名前空間を含めて、そのクラスと関数を呼び出さずに使用できるようにします。
  3. プログラムのロジックを追加する main() 関数を呼び出します。
  4. main() 関数の本体の開始。
  5. サイズ 3x2x3 の an という名前の 2D 配列を宣言します。 配列の値も初期化されています。
  6. 配列のインデックス [0][1][0] に格納されている項目にアクセスし、コンソールに表示します。
  7. 配列のインデックス [0][1][1] に格納されている項目にアクセスし、コンソールに表示します。
  8. main() 関数の本体の終わり。

配列へのポインタ

A ポインタ アドレスを保持する変数です。 ポインタを使用して変数のアドレスを格納する以外に、配列セルのアドレスを格納するためにも使用できます。 配列の名前は常にその最初の要素を指します。 以下の宣言を考えてみましょう。

int age[5];

age は、age という名前の配列の最初の要素のアドレスである $age[0] へのポインターです。 以下を検討してくださいwing 例:

#include <iostream>
using namespace std;
int main()
{
	int *john;

	int age[5] = { 19, 18, 21, 20, 17 };

	john = age;

	cout << john << "\n";

	cout << *john;
	
}

出力:

配列へのポインタ

上記の出力の最初の値は、コンピューターのメモリ内の配列の最初の要素に割り当てられたアドレスに応じて、異なる値を返す場合があることに注意してください。

コードのスクリーンショットは次のとおりです。

配列へのポインタ

コードの説明:

  1. コードに iostream ヘッダー ファイルを含めます。 これにより、コンソールからの読み取りとコンソールへの書き込みが可能になります。
  2. std 名前空間を含めて、そのクラスと関数を呼び出さずに使用できるようにします。
  3. プログラムのロジックを追加する main() 関数を呼び出します。
  4. main() 関数の本体の開始。
  5. *john という名前のポインター変数を宣言します。
  6. age という名前の整数配列を宣言して、5 つの整数を格納します。 整数の値も初期化されています。
  7. 変数 john に、配列 age の最初のインデックスに格納されている項目のアドレスの値を割り当てます。
  8. 変数 john の値を出力します。これは、配列 age の最初のインデックスに格納されている項目のアドレスです。
  9. 配列 age に格納されている最初の値を出力します。
  10. main() 関数の本体の終わり。

配列名は定数ポインターとして使用でき、その逆も同様です。 これは、*(age + 3) を使用して、配列 age のインデックス 3 に格納されている値にアクセスできることを意味します。 例えば:

#include <iostream>
using namespace std;

int main() {
	// an array of 5 elements.
	int age[5] = { 19, 18, 21, 20, 17 };
	int *p;

	p = age;

	// output array values

	cout << "Using pointer: " << endl;

	for (int x=0; x<5; x++) {
		cout << "*(p + " << x << ") : ";
		cout << *(p + x) << endl;
	}
	cout << "Using age as address: " << endl;

	for (int x = 0; x < 5; x++) {
		cout << "*(age + " << x << ") : ";
		cout << *(age + x) << endl;
	}

	return 0;
}

出力:

配列へのポインタ

コードのスクリーンショットは次のとおりです。

配列へのポインタ

コードの説明:

  1. コードに iostream ヘッダー ファイルを含めます。 これにより、コンソールからの読み取りとコンソールへの書き込みが可能になります。
  2. std 名前空間を含めて、そのクラスと関数を呼び出さずに使用できるようにします。
  3. main() 関数を呼び出し、main() 関数の本体を開始します。
  4. コメント。 C++ コンパイラはこれをスキップします。
  5. age という名前の配列を宣言して 5 つの整数を格納します。
  6. 整数ポインタの作成 p.
  7. p に配列 age の最初の要素のアドレスの値を割り当てます。
  8. コメント。 C++ コンパイラはこれをスキップします。
  9. コンソールにテキストを出力します。
  10. for ループを使用して整数 x を作成します。 { は、for a ループの本体の始まりを示します。
  11. x の値を他のテキストと組み合わせてコンソールに出力します。
  12. *(p + x) の値をコンソールに出力します。
  13. for a ループの本体の終わり。
  14. コンソールにテキストを出力します。
  15. for ループを使用して変数 x を作成します。 { は、for ループ本体の始まりを示します。
  16. 0 から 4 までの x の値を他のテキストと一緒に出力します。
  17. *(age + x) の値を出力します。
  18. for ループの本体の終わり。
  19. プログラムが正常に実行された場合の戻り値。
  20. main() 関数の本体の終わり。

配列の値へのアクセス

配列の要素には、それぞれのインデックスを使用してアクセスします。アクセスする要素のインデックスを四角形内に追加します brackets 配列名の直後に [ ]。例えば:

int john = age[2];

上の例では、ジョンの年齢が age という名前の配列のインデックス 2 に格納されることを示しているだけです。 これはジョンの年齢が 3 歳であることを意味しますrd 配列の値 age。 この値にアクセスして出力する方法を示す完全な C++ 例を次に示します。

#include<iostream>
using namespace std;
int main()
{
	int age[5] = { 19, 18, 21, 20, 17 };
	int john = age[2];
	cout << "The age of John is:"<<john;
}

出力:

配列の値へのアクセス

コードのスクリーンショットは次のとおりです。

配列の値へのアクセス

コードの説明:

  1. コードに iostream ヘッダー ファイルを含めます。 これにより、コンソールからの読み取りとコンソールへの書き込みが可能になります。
  2. std 名前空間を含めて、そのクラスと関数を呼び出さずに使用できるようにします。
  3. コードを追加する main() 関数を呼び出します。
  4. main() 関数の本体の開始。
  5. age という名前の配列を宣言して、5 つの整数要素を格納します。
  6. 配列 age のインデックス 2 に格納されている値にアクセスし、その値を john という名前の変数に格納します。
  7. 変数 john の値を他のテキストと一緒にコンソールに出力します。

C++ における配列の利点

C++ で配列を使用する利点と利点を次に示します。

  • 配列要素は簡単に走査できます。
  • 配列データの操作が簡単です。
  • 配列要素にはランダムにアクセスできます。
  • 配列はコードの最適化を容易にします。 したがって、少ないコードで多くの作業を実行できます。
  • 配列データを簡単にソートできます。

C++ における配列の欠点

  • 配列のサイズは固定です。 したがって、初期化後に新しい要素を追加することはできません。
  • 要件より多くのメモリを割り当てるとメモリ領域が無駄になり、メモリの割り当てが少ないと問題が発生する可能性があります。
  • 配列に格納する要素の数は事前にわかっている必要があります。

まとめ

  • 配列は、同じデータ型の要素を格納するデータ構造です。
  • 配列要素は順番に格納されます。
  • 配列要素は、それぞれのインデックスを使用して示されます。 最初の要素はインデックス 0 にあり、最後の要素はインデックス n-1 にあります。ここで、 は配列要素の総数です。
  • 配列の宣言には、配列要素のデータ型と配列に格納される要素の数の定義が含まれます。
  • XNUMX 次元配列には要素が順番に格納されます。
  • XNUMX 次元配列は、要素を行と列に格納します。
  • XNUMX 次元配列は配列の配列です。
  • 要素は、インデックスを使用して配列に追加できます。
  • 配列要素にはインデックスを使用してアクセスします。
  • 多次元配列には複数の次元があります。
  • 配列名はその最初の要素を指します。
  • 配列のサイズは固定です。つまり、配列の初期化後に新しい要素を配列に追加することはできません。