
C言語入門|配列型を理解する:配列変数の型と要素の型の違い
C言語を勉強していると、配列を使い始めたあたりで
「えっ? これって何型なの?」
と、ちょっと立ち止まりたくなる瞬間があります。
特にこんな宣言を見たときです。
int scores[5];この scores という変数、いったい何型の変数だと思いますか?
「int 型かな?」
「だって int って書いてあるし…」
そう感じるのはとても自然です。
でも、ここには C言語ならではの ちょっと大事な落とし穴 があるんです。
このページでは、
配列変数の型 と 要素の型 の違いを、図や表を使いながら、やさしく整理していきます。

配列型の意味を考えてみよう
まずは、先ほどの宣言をもう一度見てみましょう。
int scores[5];一見すると「int 型の変数を宣言している」ように見えますよね。
でも、int 型が表せるのは 整数1つ だけのはずです。
ところが scores には、整数が5つ入ります。
ここで、こんなふうにイメージしてみてください。
- 小さな箱(int 型)が 5 個 横に並んでいる。
- それら全部をひとまとめにして管理している大きな箱が scores
つまり、scores は
整数そのもの ではなく
整数の箱を5個まとめて持っている箱 なんです。
配列変数の型と要素の型はまったく別もの
ここがこの記事でいちばん大切なポイントです。
int scores[5];この宣言には、実は 2種類の型 が登場しています。
| 対象 | 型 | 説明 |
|---|---|---|
| 配列変数 scores | int[5] 型 | 5個の int をまとめた配列そのもの |
| 各要素 scores[0] | int 型 | 整数を1つだけ扱う |
と少しややこしいですが、
- 横に並んだ 5 個の箱 → それぞれが int 型
- 全体を囲む大きな枠 → これが int[5] 型
配列変数の型 = 配列型
要素の型 = 基本型
この2つは、似ているようで まったく別物 なんですね。
配列型は「配列専用の型」
C言語では、配列全体を表す型を 配列型(array type) と呼びます。
例えばこんな感じです。
| 宣言 | 配列変数の型 |
|---|---|
| int scores[5]; | int[5] 型 |
| float temps[3]; | float[3] 型 |
要素数が変わると、型そのものも変わる という点がポイントです。
int[5] 型 と int[10] 型は、
見た目は似ていますが 別の型 として扱われます。
C言語の型をざっくり整理してみよう
ここで、C言語に登場する主な型を、役割ごとに整理してみます。
| 分類 | 型の例 |
|---|---|
| 真偽値型 | bool |
| 文字型 | char |
| 整数型 | short, int, long |
| 実数型 | float, double |
| 集成体型 | struct ○○型 |
| 共用体型 | union ○○型 |
| 配列型 | int[5] 型 など |
配列型は、struct 型と同じ 集成体型 に分類されます。
集成体型って何?
「しゅうせいたい…? なんだか難しそう…」
安心してください。
言葉は少し堅いですが、意味はとてもシンプルです。
複数のデータをひとまとめにした型
これが集成体型です。
- int 型 → 整数を1つだけ
- int[5] 型 → 整数を5つまとめて
- struct 型 → 異なるデータをまとめて
つまり、
- int 型は「単体」
- int[5] 型は「集合」
この違いが、配列を理解するうえでとても大切になります。
型の見た目にだまされないで
int[5] 型と int 型は、
見た目が似ているだけで 中身も役割も別物 です。
実は、
- int 型 と long 型
よりも - int 型 と int[5] 型
のほうが、ずっと遠い存在なんです。
「[] が付いているだけ」と思わずに、
まったく別の型 として意識しておくと、
後々の理解がグッと楽になりますよ。
配列型の表記がややこしく感じる理由
「だったら、こう書けたらいいのに…」
int[5] scores;残念ながら、C言語ではこれは書けません。
C言語では、配列宣言が次のように分断されて書かれます。
int scores[5];- 左側:型の一部(int)
- 中央:変数名(scores)
- 右側:型の一部([5])
この 型が左右に分かれて登場する という特徴が、
配列をややこしく感じさせる原因です。
コツとしては、
頭の中では常に
int[5] scores;
と読んであげる
これだけで、理解がずいぶん楽になります。
可変長配列という例外的な存在
基本ルールとして、C言語の配列は
コンパイル時に要素数が決まっている必要があります。
int scores[5]; // OK
int scores[n]; // NG(n が変数の場合)ただし、近年のC言語では
可変長配列(VLA:variable length array)
という機能も追加されました。
これは、
- 関数の中だけで使える。
- 要素数を変数で指定できる。
という特徴を持っています。
ただし、
- すべてのコンパイラが対応しているわけではない
- 初期化に制約がある
などの注意点もあります。
初心者のうちは、
配列の要素数は固定する
という基本ルールをしっかり身につけるのがおすすめです。
サンプルプログラムで確認してみよう
ここでは、理解を助けるために
配列型と要素の型がはっきり分かる簡単な例を見てみましょう。
プロジェクト名:7-4-1 ソースファイル名: sample7-4-1.c
#include <stdio.h>
int main(void)
{
int levels[3] = { 1, 2, 3 };
printf("最初のレベルは %d です\n", levels[0]);
printf("最後のレベルは %d です\n", levels[2]);
return 0;
}このプログラムでは、
- levels は int[3] 型の配列変数
- levels[0] や levels[2] は int 型の要素
という関係になっています。
printf 命令は
指定した書式に従って文字や数値を表示する命令 です。
- %d は整数を表示するための指定
- levels[0] は int 型なので、そのまま渡せます
配列そのものと、要素を使い分けている点に注目してみてください。
まとめ:配列型は「箱をまとめた箱」
最後に、今日の内容をひとことでまとめると、こうなります。
- 配列変数は要素とは違う型を持つ
- 配列変数の型は 配列型
- 配列型は 集成体型 の一種
- 見た目が似ていても int 型 と int[5] 型は別物
この感覚が身につくと、
ポインタや関数引数に進んだときも、理解がとてもスムーズになります。
焦らず、少しずつ「型の違い」に慣れていきましょう 😊
