工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

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

配列とは

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

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

この C++ チュートリアルでは、次のことを学びます:

配列が必要な理由

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

C++ で配列を宣言する

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

type array-Name [ array-Size ];

C++ で 1 次元配列を宣言するための規則。

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

int age[5];

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

配列の初期化

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

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

age 配列を使用して、配列の初期化を行う方法を示しましょう:

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

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

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

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

age[3] = 20;

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

配列の種類

C++ 配列には次の 2 種類があります。

一次元配列

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

datatype array-name[size];

例:

#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";
	}
}

出力:

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

コードの説明:

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

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

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

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

    二次元配列

    2D 配列は、データを 1D 配列のリストに格納します。これは、行と列を持つマトリックスです。 2D 配列を宣言するには、次の構文を使用します:

    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×3 行列として見ることができる 2D 配列があります。 2 行 3 列です。要素 0 は、インデックス 0 の行とインデックス 1 の列の交点にあるため、a[0][1] としてアクセスできます。要素 3 は、行インデックス 1 と列インデックス 2 の交点。

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

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

    次の 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;
    }
    

    出力:

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

    コードの説明:

    <オール>
  • コードに iostream ヘッダー ファイルをインクルードします。これにより、コンソールからの読み取りとコンソールへの書き込みが可能になります。
  • std 名前空間を含めて、そのクラスと関数を呼び出さずに使用できるようにする。
  • コードを追加する main() 関数を呼び出す。
  • main() 関数の本体の開始。
  • コメント。 C++ コンパイラはこれをスキップします。
  • 3 行 2 列の 2D 配列を宣言する。アイテムも配列に追加されました。
  • コメント。 C++ コンパイラはこれをスキップします。
  • for ループを使用して変数 i を作成します。この変数は、配列の行インデックスを反復処理します。
  • for ループを使用して変数 j を作成します。この変数は、配列の列インデックスを反復処理します。
  • ループ本体の開始。
  • 変数 i と j の値をコンソールの角括弧内に出力します。
  • 配列 a のインデックス [i][j] に格納されている値を出力します。
  • ループ本体の終わり。
  • プログラムが正常に実行された場合、main() 関数は整数値を返す必要があります。
  • main() 関数の本体の終わり。
  • 三次元配列

    3D 配列は配列の配列です。 3D 配列の各要素は、3 つのインデックスのセットによって識別されます。 3D 配列の要素にアクセスするには、3 つの 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";
    }
    

    出力:

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

    コードの説明:

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

    ポインタは、アドレスを保持する変数です。ポインターを使用して変数のアドレスを格納する以外に、ポインターを使用して配列セルのアドレスを格納できます。配列の名前は常に最初の要素を指します。以下の宣言を検討してください:

    int age[5];
    

    age は、age という名前の配列の最初の要素のアドレスである $age[0] へのポインターです。次の例を考えてみましょう:

    #include <iostream>
    using namespace std;
    int main()
    {
    	int *john;
    
    	int age[5] = { 19, 18, 21, 20, 17 };
    
    	john = age;
    
    	cout << john << "\n";
    
    	cout << *john;
    	
    }
    

    出力:

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

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

    コードの説明:

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

    出力:

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

    コードの説明:

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

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

    int john = age[2];
    

    上記の例では、単に john の年齢が age という名前の配列のインデックス 2 に格納されていることを示しています。これは、ジョンの年齢が 3 であることを意味します 配列 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;
    }
    

    出力:

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

    コードの説明:

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

    ここでは、C++ で配列を使用することの長所/利点を示します:

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

    まとめ


    C言語

    1. C# 配列
    2. C++ プログラミングで配列を関数に渡す
    3. Java コピー配列
    4. C++ do…while ループと例
    5. 例による配列の C++ 動的割り当て
    6. C++ ポインタと例
    7. C++ Char データ型と例
    8. C++ 演算子のオーバーロードと例
    9. C++ 関数とプログラム例
    10. 例を含む C# コレクションのチュートリアル
    11. Java Arrays チュートリアル:宣言、作成、初期化 [例]