C言語/配列
< C言語
配列の基本概念[編集]
配列とは何か[編集]
配列は、同じ型のデータを連続して格納するためのデータ構造です。個々のデータ要素はインデックス(添字)を使ってアクセスします。例えば、整数型の変数を10個格納する場合、10個の変数を個別に宣言する代わりに、1つの配列として宣言できます。
メモリ上の配置[編集]
配列はメモリ上で連続した領域に格納されます。これにより、配列の各要素に対して効率的にアクセスできます。
配列と変数の違い[編集]
変数は単一のデータを格納しますが、配列は複数の同じ型のデータを格納します。
配列の宣言と初期化[編集]
配列の宣言[編集]
配列を使用するには、まず配列の型とサイズを宣言します。例えば、10個の整数を格納する配列を宣言するには以下のようにします。
int array[10];
配列の初期化[編集]
配列を宣言すると同時に初期化することもできます。
int array[5] = {1, 2, 3, 4, 5};
これにより、arrayの各要素に順に値が代入されます。
配列の操作[編集]
配列要素へのアクセス[編集]
配列の各要素にはインデックスを使ってアクセスします。インデックスは0から始まります。
array[0] = 10; // 配列の最初の要素に10を代入
ループを使った配列操作[編集]
配列の全要素にアクセスする場合、ループを使うのが一般的です。
const int len = sizeof array / sizeof *array; for (int i = 0; i < len; i++) { printf("%d ", array[i]); }
配列の使用例[編集]
基本的な使用例[編集]
- 数値の合計と平均の計算
int sum = 0; for (int i = 0; i < len; i++) { sum += array[i]; } double average = (double)sum / len; printf("Sum: %d, Average: %.2f\n", sum, average);
- 最大値と最小値の探索
int max = array[0]; int min = array[0]; for (int i = 1; i < len; i++) { if (array[i] > max) { max = array[i]; } if (array[i] < min) { min = array[i]; } } printf("Max: %d, Min: %d\n", max, min);
多次元配列[編集]
二次元配列の概念[編集]
二次元配列は行と列で構成される配列で、例えば行列のようにデータを格納します。
二次元配列の宣言と初期化[編集]
int matrix3x4[3][4]; int matrix[2][2] = {{1, 2}, {3, 4}};
二次元配列の操作[編集]
for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { printf("%d ", matrix[i][j]); } printf("\n"); }
配列とポインタ[編集]
配列名とポインタの関係[編集]
配列名は配列の先頭要素へのポインタとして扱われます。
int *p = array;
ポインタを使った配列操作[編集]
for (int i = 0; i < len; i++) { printf("%d ", *(array + i)); }
文字列と文字配列[編集]
文字列の概念[編集]
文字列は文字の配列として扱われ、最後にヌル文字 `\0` が含まれます。
char str[6] = "hello";
文字配列の操作[編集]
標準ライブラリ関数を使って文字列を操作します。
#include <string.h> printf("Length: %lu\n", strlen(str));
配列の制約と注意点[編集]
メモリ管理[編集]
静的配列はサイズが固定されており、動的にサイズを変更することはできません。
境界チェックの重要性[編集]
配列の範囲外アクセスは未定義の動作を引き起こすため、範囲チェックが重要です。
章末問題[編集]
理解度チェック[編集]
- 基本問題
- 5つの整数を格納する配列を宣言し、各要素に値を代入して出力するプログラムを書きなさい。
- 応用問題
- 配列の要素を入力し、バブルソートで昇順に並べ替えるプログラムを書きなさい。
- プログラム作成問題
- 配列を用いて、指定された文字列の逆順を表示するプログラムを書きなさい。
この章を通じて、配列の基本から応用までの知識を身につけ、C言語で配列を効果的に使えるようになることを目指します。