
C言語のきほん|1次元配列の基本操作
配列は、たくさんの値を整理して扱うための第一歩。1次元配列の基本操作を覚えると、C言語の表現力がぐっと広がります
C言語でプログラムを作っていると、同じ種類のデータをいくつもまとめて扱いたい場面がよくあります。
たとえば、5人分の点数、7日分の売上、10個の商品価格のように、同じ型の値を複数保存したいことがあります。
このようなとき、変数を1つずつ別々に用意していると、プログラムが長くなり、管理もしにくくなってしまいます。
そこで活躍するのが 1次元配列 です。
1次元配列を使うと、同じ型のデータをひとまとめにして扱えるようになります。
しかも、それぞれの要素には番号がついているので、必要な場所に値を入れたり、取り出したりできます。
この仕組みを理解すると、繰り返し処理と組み合わせてたくさんのデータを効率よく扱えるようになります。
ただし、配列は便利な反面、普通の変数とは少し違うルールがあります。
たとえば、添字は 0 から始まること、宣言しただけでは要素が不定値のままであること、使える範囲を超えてはいけないことなど、最初にしっかり押さえておきたい点があります。
ここでは、1次元配列の基本操作として、宣言、値の代入、要素の参照を順番に見ていきます。
配列のしくみをやさしく整理しながら、コードの読み方と書き方を丁寧に身につけていきましょう。
1次元配列とは
1次元配列は、同じ型のデータを一直線に並べて保存する仕組みです。
イメージとしては、番号つきの箱が並んでいて、それぞれの箱に値を入れるような形です。
たとえば、int 型の値を5個保存する配列なら、次のように考えると分かりやすいです。

この箱ひとつひとつが、配列の 要素 です。
そして、それぞれの位置を表す番号を 添字 と呼びます。
C言語では、この添字が 0 から始まるところが大切です。
1次元配列を宣言する
まずは、配列を使うために宣言が必要です。
文法
型名 配列名[要素数];この形で書くと、指定した型の要素を、指定した個数だけ持つ配列を用意できます。
各部分の意味
| 項目 | 内容 |
|---|---|
| 型名 | 配列に入れるデータの型 |
| 配列名 | 配列につける名前 |
| 要素数 | 何個の要素を持つか |
たとえば、整数を5個保存する配列なら、次のように書きます。
int scores[5];これは、int 型の要素を5個持つ配列 scores を宣言するという意味です。
宣言しただけでは中身は決まっていない
ここで大事なのは、配列を宣言しただけでは、各要素の中身はまだ不定値だということです。
不定値とは、どんな値が入っているか決まっていない状態のことです。
つまり、次のような宣言をしただけでは、
int scores[5];中身は次のようなイメージです。
配列 scores
[0] 不定値
[1] 不定値
[2] 不定値
[3] 不定値
[4] 不定値この状態の要素をそのまま使うと、予測できない動作につながることがあります。
そのため、使う前に値を代入することが大切です。
要素数と添字は別物
配列学習で最初につまずきやすいのが、要素数 と 添字 の違いです。
たとえば、
int scores[5];と書いたとき、要素数は 5 です。
でも、使える添字は 0 から 4 までです。
| 項目 | 値 |
|---|---|
| 要素数 | 5 |
| 最初の添字 | 0 |
| 最後の添字 | 4 |
つまり、要素数が5だからといって scores[5] が使えるわけではありません。
使えるのは scores[0] から scores[4] までです。
1次元配列に値を代入する
宣言した配列には、添字を使って各要素に値を代入します。
文法
配列名[添字] = 値;各部分の意味
| 項目 | 内容 |
|---|---|
| 配列名 | 値を入れる配列の名前 |
| 添字 | どの要素に入れるかを示す番号 |
| 値 | 実際に代入する値 |
たとえば、次のように書きます。
scores[0] = 85;
scores[1] = 92;
scores[2] = 78;この意味は、
- scores[0] に 85 を入れる
- scores[1] に 92 を入れる
- scores[2] に 78 を入れる
ということです。
代入後の配列の状態
このとき、配列の中身は次のようになります。
配列 scores
[0] 85
[1] 92
[2] 78
[3] 不定値
[4] 不定値ここで注意したいのは、値を代入した要素だけが確定し、代入していない要素は不定値のままだということです。
つまり、
scores[0] = 85;
scores[1] = 92;
scores[2] = 78;と書いても、scores[3] と scores[4] にはまだ値を入れていません。
そのため、その2つはまだ使わないほうが安全です。
1次元配列の要素を参照する
配列の要素を使いたいときも、添字を使って指定します。
文法
配列名[添字]この形は、配列の中の1つの要素を表します。
たとえば、scores[0] は scores の0番目の要素です。
この要素を printf の中で使えば、値を表示できます。
printf("%d\n", scores[0]);
printf("%d\n", scores[1]);
printf("%d\n", scores[2]);このコードでは、scores[0]、scores[1]、scores[2] の値が順番に表示されます。
サンプルプログラムで確認しよう
元の例では学生の点数を使っていましたが、ここでは内容を変えて、5日分の水分補給量を扱うシンプルな例にしてみます。
コメントも表示メッセージも日本語にしています。
サンプルプログラム
ファイル名:10_2_1.c
#include <stdio.h>
int main(void)
{
// 配列の宣言
int drinks[5]; // 5日分の水分補給量を保存する配列
// 配列に値を代入
drinks[0] = 1200; // 1日目の水分補給量
drinks[1] = 1500; // 2日目の水分補給量
drinks[2] = 900; // 3日目の水分補給量
// 配列要素を参照して表示
printf("%d\n", drinks[0]);
printf("%d\n", drinks[1]);
printf("%d\n", drinks[2]);
return 0;
}実行結果の例
1200
1500
900このプログラムの流れを見てみよう
このプログラムでは、次の順番で配列を使っています。
配列の宣言
int drinks[5];ここで、int 型の要素を5個持つ配列 drinks を用意しています。
ただし、この時点では中身はまだ不定値です。
要素への代入
drinks[0] = 1200;
drinks[1] = 1500;
drinks[2] = 900;ここで、先頭から3つの要素に値を入れています。
一方で、drinks[3] と drinks[4] にはまだ値を入れていません。
要素の参照
printf("%d\n", drinks[0]);この形で、配列の中の値を取り出して表示しています。
普通の変数のように扱っているように見えますが、実際には 配列名 + 添字 で要素を指定しています。
初期化との違いも知っておこう
今回の中心は宣言、代入、参照ですが、配列には初期化という方法もあります。
初期化は、宣言と同時に値を入れる書き方です。
int drinks2[] = {1200, 1500, 900, 1100, 1300};このように書くと、配列を作ると同時に全要素へ値を入れられます。
宣言と代入と初期化の違いを表にすると、次のようになります。
| 操作 | 例 | 意味 |
|---|---|---|
| 宣言 | int a[5]; | 配列だけ用意する |
| 代入 | a[0] = 10; | あとから1要素ずつ値を入れる |
| 初期化 | int a[] = {10, 20, 30}; | 宣言と同時に値を入れる |
配列の要素は普通の変数のように使える
配列の各要素は、取り出してみると1つの値です。
そのため、計算や表示にも使えます。
たとえば次のようなことができます。
int total = drinks[0] + drinks[1];
printf("%d\n", total);このように、drinks[0] や drinks[1] は整数値として扱えます。
つまり、配列そのものは複数の値の集まりですが、配列の各要素は普通の変数のように使えるということです。
添字の範囲外を使ってはいけない
配列では、使える添字の範囲を守ることがとても重要です。
たとえば、
int drinks[5];int drinks[5];
なら、使える添字は 0 ~ 4 です。
次のような指定は正しくありません。
drinks[5] = 1000;これは6番目の要素を使おうとしていることになり、配列の範囲外です。
このような書き方は、バグや予期しない動作の原因になります。
配列の状態を表で整理しよう
今回のサンプルの代入後の状態を表にすると、こうなります。
| 添字 | 値 |
|---|---|
| 0 | 1200 |
| 1 | 1500 |
| 2 | 900 |
| 3 | 不定値 |
| 4 | 不定値 |
この表を見ると、どの要素に値が入っていて、どれが未設定なのかが分かりやすいです。
変数と配列の違い
普通の変数と配列の違いも整理しておきましょう。
| 項目 | 普通の変数 | 配列 |
|---|---|---|
| 保存できる値の数 | 1個 | 複数個 |
| 使い方 | 変数名で参照 | 配列名と添字で参照 |
| 向いている場面 | 単独の値を扱う | 同じ型の値をまとめて扱う |
たとえば、1人分の点数なら普通の変数でも十分です。
でも、30人分の点数を扱うなら、配列のほうが圧倒的に便利です。
1次元配列の基本操作を図でイメージしよう
ここまでの内容を、流れとして図にすると次のようになります。

この3段階を押さえておくと、1次元配列の基本はかなり理解しやすくなります。
よくあるつまずき
1次元配列の学習では、次のような点でつまずきやすいです。
| つまずきやすい点 | 内容 |
|---|---|
| 添字を1から始めてしまう | C言語では0から始まる |
| 要素数と最後の添字を混同する | 要素数5なら最後は4 |
| 宣言しただけで使ってしまう | 中身は不定値のことがある |
| 一部だけ代入して全部使う | 代入していない要素は不定値のまま |
| 範囲外の添字を使う | バグの原因になる |
このあたりを意識しながらコードを読むと、配列の動きがかなりつかみやすくなります。
これから先につながる大事な土台
1次元配列の宣言、代入、参照は、配列学習の出発点です。
この基本がしっかり分かると、次に学ぶ繰り返し処理との組み合わせ、配列の初期化、2次元配列、文字列、関数への受け渡しなども理解しやすくなります。
配列は少し見た目が独特ですが、考え方はとても素直です。
同じ型のデータを、番号つきの箱にまとめて保存する
このイメージをしっかり持てるようになると、C言語らしいデータの扱い方がどんどん見えてきます。
