logo

C の動的配列

動的配列 はプログラミングにおける強力なデータ構造であり、 作成 そして 操作する 実行時にさまざまなサイズの配列が生成されます。 C では、動的配列はポインターとメモリー割り当て関数を使用して実装されるため、メモリー使用量を最適化し、効率的なプログラムを作成するための貴重なツールとなります。この記事では、C の動的配列の概念、その利点と欠点、およびその作成方法と操作方法について説明します。

動的配列を理解する

動的配列 実行中にサイズを変更できる配列です。 ランタイム 。とは異なり 静的配列 、コンパイル時に決定される固定サイズを持ちますが、動的配列は必要に応じてサイズを変更できます。保存されるデータ量に合わせて配列のサイズを調整できるため、柔軟性が向上し、メモリ管理が向上します。

動的配列は、ポインターとメモリ割り当て関数を使用して実装されます。 C では、最も一般的に使用されるメモリ割り当て関数は次のとおりです。 malloc() calloc() 、 そして realloc() 。これらの関数を使用すると、動的配列の作成と操作に必要な、実行時のメモリの割り当てと割り当て解除が可能になります。

動的配列の利点

C で動的配列を使用することにはいくつかの利点があります。主な利点のいくつかは次のとおりです。

  1. 主な利点の 1 つは、より適切なメモリ管理が可能になることです。静的配列の場合、配列のサイズは次のようになります。 修理済み これは、メモリが配列全体に一度に割り当てられることを意味します。配列が完全に利用されていない場合、メモリが無駄になる可能性があります。
  2. 動的配列を使用すると、必要な場合にのみメモリが割り当てられるため、メモリの使用効率が向上します。
  3. 動的配列により、柔軟性も向上します。
  4. 特に実行時に配列のサイズを変更する必要がある場合には、制限が生じる可能性があります。
  5. 動的配列を使用すると、必要に応じて配列のサイズを調整できるため、プログラムの汎用性と適応性が高まります。

動的配列の欠点

動的配列には多くの利点がありますが、いくつかの欠点もあります。主な欠点のいくつかは次のとおりです。

10 100万
  1. 主な欠点の 1 つは、静的配列よりも実装が複雑になる可能性があることです。
  2. 動的配列には次の使用が必要です ポインタ そして メモリ割り当て関数 これは、静的配列の単純な配列構文よりも理解し、使用するのが難しい場合があります。
  3. 動的配列は静的配列よりも遅くなる場合もあります。メモリの割り当てと割り当て解除が関係するため、動的配列の使用に関連するオーバーヘッド コストが発生します。このオーバーヘッド コストにより、場合によっては動的配列が静的配列よりも遅くなる可能性があります。

C での動的配列の作成

C で動的配列を作成するには、次を使用する必要があります。 メモリ割り当て関数 配列にメモリを割り当てます。 C で最も一般的に使用されるメモリ割り当て関数は次のとおりです。 malloc()、calloc() 、 そして realloc() 。次に、malloc() を使用して動的配列を作成する方法の例を示します。

Javaでソートされた配列リスト
 int *arr; int size = 10; arr = (int*) malloc(size * sizeof(int)); 

説明:

この例では、整数配列へのポインタを宣言します。 到着しました 。という整数変数も宣言します。 サイズ 、これは作成する配列のサイズを表します。その後、私たちは、 malloc() 配列にメモリを割り当てる関数。の malloc() 関数は配列のサイズを受け取ります( バイト ) を引数として使用するため、配列のサイズに整数のサイズを掛けます (これは 4バイト ほとんどのシステムでは)、合計サイズをバイト単位で取得します。

C での動的配列の操作

C で動的配列を作成したら、他の配列と同じように操作できます。配列構文を使用して配列の個々の要素にアクセスできます。

 arr[0] = 5; 

この例では、配列の最初の要素を次のように設定します。 5

私たちも使うことができます ループ 配列を反復処理するには:

 for (int i = 0; i<size; i++) { arr[i]="i" * 2; } < pre> <p>In this example, we use a <strong> <em>for loop</em> </strong> to set each element of the array to twice its index.</p> <p>To resize a dynamic array in C, we can use the <strong> <em>realloc()</em> </strong> function. The <strong> <em>realloc()</em> </strong> function takes two arguments: a <strong> <em>pointer</em> </strong> to the original memory block and the <strong> <em>new size</em> </strong> of the memory block. Here is an example of how to resize a dynamic array using realloc():</p> <pre> int new_size = 20; arr = (int*) realloc(arr, new_size * sizeof(int)); </pre> <p>In this example, we declare a new integer variable called <strong> <em>new_size</em> </strong> , which represents the new size of the array. After that, we use the <strong> <em>realloc() function</em> </strong> to resize the array. The <strong> <em>realloc() function</em> </strong> takes the pointer to the original memory block (in this case, <strong> <em>arr</em> </strong> ) and the <strong> <em>new size</em> </strong> of the memory block (in <strong> <em>bytes</em> </strong> ). We multiply the <strong> <em>new size</em> </strong> of the array by the <strong> <em>size</em> </strong> of an <strong> <em>integer</em> </strong> to get the total size in bytes.</p> <p>It is important to note that when we resize a dynamic array using <strong> <em>realloc()</em> </strong> , any existing data in the array will be preserved. If the new size of the array is larger than the original size, the new elements will be uninitialized.</p> <p>To free the memory used by a dynamic array in C, we can use the <strong> <em>free()</em> </strong> function. The <strong> <em>free()</em> </strong> function takes a pointer to the memory block that was allocated using <strong> <em>malloc()</em> </strong> , <strong> <em>calloc()</em> </strong> , or <strong> <em>realloc()</em> </strong> . Here is an example of how to free the memory used by a dynamic array:</p> <pre> free(arr); </pre> <p>In this example, we use the <strong> <em>free() function</em> </strong> to free the memory used by the dynamic array <strong> <em>arr</em> </strong> . It is important to note that once we have freed the memory used by a dynamic array, we should not attempt to access the elements of the array.</p> <h3>Some more examples of using dynamic arrays in C:</h3> <p> <strong>Adding Elements to a Dynamic Array:</strong> </p> <p>One of the main benefits of using a dynamic array is the ability to add elements to the array as needed. Here is an example of how to add an element to a dynamic array:</p> <pre> #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } add a new element to the array size++; arr="(int*)" realloc(arr, size * sizeof(int)); arr[size-1]="i;" for(i="0;" i< size; printf('%d ', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc()</em> </strong> function. After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To add a new element to the array, we increment the size of the array by one and use the <strong> <em>realloc() function</em> </strong> to resize the array. We set the value of the last element in the array to the current value of <strong> <em>i</em> </strong> . Finally, we print the contents of the array and free the memory used by the array.</p> <h3>Resizing a Dynamic Array</h3> <p>Another advantage of using a dynamic array is the ability to resize the array as needed. Here is an example of how to resize a dynamic array:</p> <pre> #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } resize the array size="10;" arr="(int*)" realloc(arr, * sizeof(int)); for(i="5;" i< size; printf('%d ', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 6 7 8 9 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc() function</em> </strong> . After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To resize the array, we set the value of size to <strong> <em>10</em> </strong> and use the <strong> <em>realloc()</em> </strong> function to resize the array. After that, we set the value of the new elements in the array using another for loop. Finally, we print the contents of the array and free the memory used by the array.</p> <h2>Conclusion</h2> <p> <strong> <em>Dynamic arrays</em> </strong> are a powerful data structure in programming that allow for the creation and manipulation of arrays of varying sizes during runtime. In C, dynamic arrays are implemented using pointers and memory allocation functions, making them a valuable tool for optimizing memory usage and creating efficient programs.</p> <p>While <strong> <em>dynamic arrays</em> </strong> have many advantages, they also have some disadvantages. Dynamic arrays can be more complex to implement than static arrays and can be slower in some cases. However, the flexibility and efficiency of dynamic arrays make them a valuable tool for many programming tasks.</p> <p>To create and manipulate dynamic arrays in C, we must use memory allocation functions to allocate and deallocate memory during runtime. The most commonly used memory allocation functions in C are <strong> <em>malloc()</em> </strong> , <strong> <em>calloc()</em> </strong> , and <strong> <em>realloc()</em> </strong> . It is important to properly manage memory usage when working with dynamic arrays to avoid memory leaks and other memory-related issues.</p> <hr></size;></pre></size;></pre></size;>

この例では、という名前の新しい整変数を宣言します。 新しいサイズ 、配列の新しいサイズを表します。その後、私たちは、 realloc() 関数 配列のサイズを変更します。の realloc() 関数 元のメモリ ブロックへのポインタを受け取ります (この場合、 到着しました ) そしてその 新しいサイズ メモリブロックの( バイト )。を掛け算します。 新しいサイズ による配列の サイズ 整数 合計サイズをバイト単位で取得します。

を使用して動的配列のサイズを変更する場合は、次のことに注意することが重要です。 realloc() 、配列内の既存のデータはすべて保持されます。配列の新しいサイズが元のサイズより大きい場合、新しい要素は初期化されません。

Cプログラム

C の動的配列によって使用されるメモリを解放するには、次のように使用できます。 無料() 関数。の 無料() 関数は、次の方法で割り当てられたメモリ ブロックへのポインタを受け取ります。 malloc() calloc() 、 または realloc() 。次に、動的配列によって使用されるメモリを解放する方法の例を示します。

 free(arr); 

この例では、 free()関数 動的配列によって使用されているメモリを解放するには 到着しました 。動的配列によって使用されているメモリを解放した後は、配列の要素にアクセスしようとしないことに注意することが重要です。

C での動的配列の使用例をさらにいくつか示します。

動的配列への要素の追加:

何か簡単な並べ替え

動的配列を使用する主な利点の 1 つは、必要に応じて要素を配列に追加できることです。以下は、動的配列に要素を追加する方法の例です。

 #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } add a new element to the array size++; arr="(int*)" realloc(arr, size * sizeof(int)); arr[size-1]="i;" for(i="0;" i< size; printf(\'%d \', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc()</em> </strong> function. After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To add a new element to the array, we increment the size of the array by one and use the <strong> <em>realloc() function</em> </strong> to resize the array. We set the value of the last element in the array to the current value of <strong> <em>i</em> </strong> . Finally, we print the contents of the array and free the memory used by the array.</p> <h3>Resizing a Dynamic Array</h3> <p>Another advantage of using a dynamic array is the ability to resize the array as needed. Here is an example of how to resize a dynamic array:</p> <pre> #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } resize the array size="10;" arr="(int*)" realloc(arr, * sizeof(int)); for(i="5;" i< size; printf(\'%d \', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 6 7 8 9 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc() function</em> </strong> . After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To resize the array, we set the value of size to <strong> <em>10</em> </strong> and use the <strong> <em>realloc()</em> </strong> function to resize the array. After that, we set the value of the new elements in the array using another for loop. Finally, we print the contents of the array and free the memory used by the array.</p> <h2>Conclusion</h2> <p> <strong> <em>Dynamic arrays</em> </strong> are a powerful data structure in programming that allow for the creation and manipulation of arrays of varying sizes during runtime. In C, dynamic arrays are implemented using pointers and memory allocation functions, making them a valuable tool for optimizing memory usage and creating efficient programs.</p> <p>While <strong> <em>dynamic arrays</em> </strong> have many advantages, they also have some disadvantages. Dynamic arrays can be more complex to implement than static arrays and can be slower in some cases. However, the flexibility and efficiency of dynamic arrays make them a valuable tool for many programming tasks.</p> <p>To create and manipulate dynamic arrays in C, we must use memory allocation functions to allocate and deallocate memory during runtime. The most commonly used memory allocation functions in C are <strong> <em>malloc()</em> </strong> , <strong> <em>calloc()</em> </strong> , and <strong> <em>realloc()</em> </strong> . It is important to properly manage memory usage when working with dynamic arrays to avoid memory leaks and other memory-related issues.</p> <hr></size;></pre></size;>

説明:

この例では、まず動的配列を作成します。 到着しました サイズの 5 を使用して malloc() 関数。その後、配列の各要素をそのインデックスに設定します。 for ループ 。配列に新しい要素を追加するには、配列のサイズを 1 つ増やして、 realloc() 関数 配列のサイズを変更します。配列の最後の要素の値を現在の値に設定します。 。最後に、配列の内容を出力し、配列によって使用されているメモリを解放します。

動的配列のサイズ変更

動的配列を使用するもう 1 つの利点は、必要に応じて配列のサイズを変更できることです。動的配列のサイズを変更する方法の例を次に示します。

 #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } resize the array size="10;" arr="(int*)" realloc(arr, * sizeof(int)); for(i="5;" i< size; printf(\'%d \', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 6 7 8 9 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc() function</em> </strong> . After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To resize the array, we set the value of size to <strong> <em>10</em> </strong> and use the <strong> <em>realloc()</em> </strong> function to resize the array. After that, we set the value of the new elements in the array using another for loop. Finally, we print the contents of the array and free the memory used by the array.</p> <h2>Conclusion</h2> <p> <strong> <em>Dynamic arrays</em> </strong> are a powerful data structure in programming that allow for the creation and manipulation of arrays of varying sizes during runtime. In C, dynamic arrays are implemented using pointers and memory allocation functions, making them a valuable tool for optimizing memory usage and creating efficient programs.</p> <p>While <strong> <em>dynamic arrays</em> </strong> have many advantages, they also have some disadvantages. Dynamic arrays can be more complex to implement than static arrays and can be slower in some cases. However, the flexibility and efficiency of dynamic arrays make them a valuable tool for many programming tasks.</p> <p>To create and manipulate dynamic arrays in C, we must use memory allocation functions to allocate and deallocate memory during runtime. The most commonly used memory allocation functions in C are <strong> <em>malloc()</em> </strong> , <strong> <em>calloc()</em> </strong> , and <strong> <em>realloc()</em> </strong> . It is important to properly manage memory usage when working with dynamic arrays to avoid memory leaks and other memory-related issues.</p> <hr></size;>

説明:

この例では、まず動的配列を作成します。 到着しました サイズの 5 を使用して malloc()関数 。その後、配列の各要素をそのインデックスに設定します。 for ループ 。配列のサイズを変更するには、size の値を次のように設定します。 10 そして使用してください realloc() 配列のサイズを変更する関数。その後、別の for ループを使用して、配列内の新しい要素の値を設定します。最後に、配列の内容を出力し、配列によって使用されているメモリを解放します。

結論

動的配列 は、実行時にさまざまなサイズの配列の作成と操作を可能にする、プログラミングにおける強力なデータ構造です。 C では、動的配列はポインターとメモリー割り当て関数を使用して実装されるため、メモリー使用量を最適化し、効率的なプログラムを作成するための貴重なツールとなります。

その間 動的配列 多くの利点がありますが、いくつかの欠点もあります。動的配列は静的配列よりも実装が複雑になる可能性があり、場合によっては速度が遅くなる可能性があります。ただし、動的配列の柔軟性と効率性により、動的配列は多くのプログラミング タスクにとって貴重なツールになります。

FCF

C で動的配列を作成および操作するには、メモリ割り当て関数を使用して、実行時にメモリの割り当てと割り当て解除を行う必要があります。 C で最も一般的に使用されるメモリ割り当て関数は次のとおりです。 malloc() calloc() 、 そして realloc() 。動的配列を使用する場合は、メモリ リークやその他のメモリ関連の問題を回避するためにメモリ使用量を適切に管理することが重要です。