
C言語基礎|配列の初期
前の節では、配列の各要素に対して a[0] = ... みたいに 代入して値を入れましたよね。
でも実は、配列は 作る瞬間にまとめて値を入れる(初期化する) ことができます。
これができると、
- 書く量が減ってスッキリする。
- 「最初の状態」がコードから一目で分かる。
- 0 で埋める配列が簡単に作れる。
と、いいことが多いんです。ここでは 配列の初期化の基本ルールを、表と図でやさしく整理していきます。

初期化ってなに?(代入との違い)
配列に値を入れる方法は大きく2つあります。
| 方法 | いつ値が入る? | 書き方の例 | 特徴 |
|---|---|---|---|
| 代入 | 宣言した後 | a[0] = 10; | 後から変更できる、入力処理向き |
| 初期化 | 宣言と同時 | int a[3] = {10, 20, 30}; | 最初の状態をまとめて書ける |
初期化は「配列を作る瞬間に中身を決める」感じです。
サンプルプログラム
やること
- 1週間(7日)の「読書時間(分)」を初期化で用意
- 添字と一緒に表示
プロジェクト名:chap5-3-1 ソースファイル名:chap5-3-1.c
// 1週間の読書時間(分)を初期化して表示
#include <stdio.h>
int main(void)
{
int reading[7] = {15, 30, 0, 20, 10, 45, 25}; // 初期化
printf("1週間の読書時間(分)を表示します。\n");
for (int i = 0; i < 7; i++)
printf("%d日目:%d分\n", i + 1, reading[i]);
return 0;
}実行結果例
1週間の読書時間(分)を表示します。
1日目:15分
2日目:30分
3日目:0分
4日目:20分
5日目:10分
6日目:45分
7日目:25分初期化子 { } の読み方(いちばん基本)
配列の初期化は、各要素の値をカンマ区切りで並べて { } で囲むのが基本です。
| 例 | 意味 |
|---|---|
| int a[5] = {1, 2, 3, 4, 5}; | a[0]~a[4] を順に 1,2,3,4,5 にする |
図で見るとこんな感じです。

「左から順番に入る」だけなので、最初はこれだけ覚えればOKです。
最後のカンマは置いてもいい(地味に便利)
初期化子の最後にカンマを付けてもOKです。
| 書き方 | OK? | うれしい点 |
|---|---|---|
| int a[3] = {1, 2, 3}; | OK | 普通の書き方 |
| int a[3] = {1, 2, 3,}; | OK | 後から追加・削除がラク |
縦に並べるスタイル(複数行)だと特に、最後のカンマがある方が編集しやすいです。
要素数を省略すると、個数から自動決定される
要素数を書かずに宣言すると、初期化子の個数が要素数になるルールがあります。
| 例 | 決まる要素数 |
|---|---|
| int b[] = {4, 8, 15}; | 3 |
図でいうと

「固定データの表」を作るときに便利です。
初期化子が足りないと、残りは 0 になる
ここが超大事ポイントです。
要素数が決まっている配列で、初期化子が途中までしかないとき…
| 例 | 実際に入る値 |
|---|---|
| int c[5] = {1, 2}; | {1, 2, 0, 0, 0} |
図で見ると

全要素を 0 にしたいなら {0} が定番
これ、めちゃ使います。
| 目的 | 書き方 | 結果 |
|---|---|---|
| 全要素を 0 にする | int d[5] = {0}; | d[0]~d[4] が全部 0 |
なぜこれで全部 0 になるかというと、さっきの「足りない分は 0」ルールが効くからです。
注意:初期化しない配列は不定値になりやすい
これも重要です。
| 宣言 | 要素の中身 |
|---|---|
| int x[5]; | 不定値(ゴミの値)になりやすい。 |
「たまたま 0 っぽい値だった」みたいな事故が起きるので、最初の状態が必要なら 初期化を使うのが安心です。
ここで登場した命令の書式と役割
for 文(配列を順番に処理する)
書式
for (初期化; 条件式; 更新) {
繰り返す処理
}何をする命令?
指定回数だけ処理を繰り返して、配列を先頭から順番に表示したり計算したりできます。
今回の例では:
- i を 0 から始める。
- i < 7 の間だけ繰り返す。
- i++ で 1 ずつ増やす。
だから reading[0]~reading[6] を順番に表示できます。
printf(文字と値を組み合わせて表示する)
書式
printf(書式文字列, 値1, 値2, ...);何をする命令?
書式文字列の %d などの位置に数値を入れて表示します。
よくあるエラー2つ(初期化は万能じゃない)
➀ 初期化子が多すぎるとエラー
| 例 | 結果 |
|---|---|
| int a[3] = {1, 2, 3, 4}; | エラー(要素数を超える) |
➁ 初期化子は「代入」できない
これは間違いです。
int a[3];
a = {1, 2, 3}; // エラー:初期化子は代入できない初期化子 { } は 宣言とセットのときだけ使える、と覚えるとスッキリします。
演習問題
演習5-3
要素数 5 の int 配列 rev を、先頭から順に 9、8、7、6、5 で初期化し、添字と値を表示するプログラムを作成せよ。
解答例
プロジェクト名:chap5-3-2 ソースファイル名:chap5-3-2.c
#include <stdio.h>
int main(void)
{
int rev[5] = {9, 8, 7, 6, 5};
printf("配列の中身を確認します。\n");
for (int i = 0; i < 5; i++)
printf("rev[%d] = %d\n", i, rev[i]);
return 0;
}まとめ(この節の“気持ちいい理解”)
- 初期化は「配列を作る瞬間に値を入れる」
- { } に並べた値は、a[0] から順に入る。
- 最後のカンマは付けてもOK
- 要素数を省略すると個数で決まる。
- 足りない分は 0、{0} で全要素 0
- 初期化しない配列は不定値になりやすい。
