
C言語基礎|sizeof演算子の要素数
配列の要素数、数えなくていい。sizeof で一発で出せる“安全な公式”を身につけよう!
配列で真価を発揮する!
sizeof 演算子は「この箱は何バイト?」を調べるための演算子です。
型の大きさ、変数の大きさ、そして配列の大きさまで、メモリのサイズ感を数字で確認できます。
特に便利なのが 配列の要素数を計算で求めるテクニックです。
配列の宣言を変更しても、式の方は変えなくてOK。つまり「数え間違い」を防げます。
ここでは、sizeof を使って 配列の要素数を求める定番の公式を、表と図でしっかり理解していきましょう。

sizeof 演算子は何をする?
sizeof の役割
- 対象の大きさ(バイト数)を返す
- 返ってくる値の型は size_t(符号無し整数型)
書き方(2種類)
| 形式 | 書き方 | 対象 | 括弧 | 例 |
|---|---|---|---|---|
| 型名形式 | sizeof(型名) | 型そのもの | 必須 | sizeof(int) |
| 式形式 | sizeof 式 | 変数・定数・配列・計算式 | 任意(推奨) | sizeof(a), sizeof(a[0]) |
※この記事では読みやすさ優先で、式でも sizeof(式) のように括弧を付けて書きます。
この記事で扱うテーマ:配列の要素数の求め方
配列の要素数は、次の式で求められます。
sizeof(配列) / sizeof(配列の先頭要素)
これがいわゆる「公式」です。
公式を表で整理
| 部品 | 式 | 意味 |
|---|---|---|
| 配列全体の大きさ | sizeof(a) | 配列 a 全体のバイト数 |
| 要素1個の大きさ | sizeof(a[0]) | 先頭要素(要素1個)のバイト数 |
| 要素数 | sizeof(a) / sizeof(a[0]) | 全体 ÷ 1個分 で個数が出る |
サンプルプログラム
プロジェクト名:chap7-11-1 ソースファイル名:chap7-11-1.c
// 配列の要素数を sizeof で求める例
#include <stdio.h>
int main(void)
{
int scores[] = {72, 85, 90, 66, 100, 58};
double temps[] = {21.5, 22.0, 19.8, 20.2};
printf("scores の要素数は %zu 個です。\n", sizeof(scores) / sizeof(scores[0]));
printf("temps の要素数は %zu 個です。\n", sizeof(temps) / sizeof(temps[0]));
return 0;
}実行結果例(環境により表示形式は同じ)
scores の要素数は 6 個です。
temps の要素数は 4 個です。図で理解:なぜ割ると要素数になるの?
配列は「要素が横に並んだ大きな箱」です。
その箱の合計サイズを、要素1個のサイズで割ると「何個並んでいるか」が出ます。
図(イメージ)

この図の説明
- sizeof(scores) は、配列 scores 全体(6個ぶん)の合計サイズを返します。
- sizeof(scores[0]) は、scores の先頭要素(int 1個)のサイズを返します。
- 合計サイズ ÷ 1個サイズ = 個数、という理屈です。
重要:この公式が強い理由(型や環境に依存しにくい)
たとえば int の大きさは環境によって 2 バイトだったり 4 バイトだったりします。
でも、この式はちゃんと要素数を出してくれます。
確認用の表
| 環境 | sizeof(int) | 6要素の配列全体 | 計算 | 要素数 |
|---|---|---|---|---|
| 例1 | 2 | 12 | 12 / 2 | 6 |
| 例2 | 4 | 24 | 24 / 4 | 6 |
つまり 要素の型が変わっても、環境が変わっても、要素数が安定して求まるのがポイントです。
よくある注意点(ここだけは押さえよう)
関数に渡した配列では、この公式が効かないことがある
関数の引数で配列を受け取ると、多くの場合「配列全体」ではなく「先頭要素へのポインタ」として扱われます。
すると sizeof(a) が配列全体ではなく、ポインタのサイズになってしまいます。
※この話は「配列の受け渡し」の章でがっつり出てくるので、ここでは“予告”だけしておきますね。
登場する命令(演算子・関数)の書式と説明
sizeof(演算子)
| 項目 | 内容 |
|---|---|
| 書式 | sizeof(型名)、sizeof 式 |
| 何をする? | 対象のバイト数を返す |
| 戻り値の型 | size_t |
printf(関数)
| 項目 | 内容 |
|---|---|
| 書式 | printf(書式文字列, 値, ...); |
| 何をする? | 書式に合わせて文字や数値を表示する |
| size_t の表示 | %zu を使う |
まとめ(覚える公式)
配列の要素数は、次の式で求められる。
sizeof(a) / sizeof(a[0])
型や環境に左右されにくいので、安心して使える“定番の公式”として覚えてOKです。
