
C言語基礎|初期化と代入の違い
変数は「作っただけ」では安心できない
前の記事では、変数に値を入れて表示するプログラムを作成しました。
では、変数を宣言しただけで、値を入れなかったらどうなるでしょうか。
まずは、次のプログラムを見てみましょう。
(実験用のため、あえて値を入れていません)

値を入れずに変数を使うとどうなる?
プロジェクト名:chap1-10-1 ソースファイル名:chap1-10-1.c
// 二つの変数を宣言しただけで表示する
#include <stdio.h>
int main(void)
{
int a, b; // a と b は int 型の変数(値は入れていない)
printf("aの値は%dです。\n", a);
printf("bの値は%dです。\n", b);
return 0;
}実行結果の一例
aの値は4213です。
bの値は-9821です。表示される数値は、毎回同じとは限りません。
実行する環境やタイミングによって、まったく違う値になることもあります。
変数の中身は「最初はゴミの値」
実は、変数が生成された直後の中身には、
不定値(ゴミの値)
が入っています。
| 状態 | 変数の中身 |
|---|---|
| 宣言直後 | 何が入っているか分からない。 |
| 値を入れた後 | 指定した値 |
そのため、
値を入れていない変数から値を取り出すと、予想外の結果になる
のです。
場合によっては、
- 変な数値が表示される。
- 実行時エラーが発生する。
といったことも起こります。
変数は作るときに値を入れるのが安全
変数を作るとき、
最初から入れる値が分かっている場合 は、
宣言と同時に値を入れておくのが安全です。
この操作を
初期化
と呼びます。
初期化を行う宣言の例
プロジェクト名:chap1-10-2 ソースファイル名:chap1-10-2.c
// 変数を初期化して表示する
#include <stdio.h>
int main(void)
{
int a = 30; // a を 30 で初期化
int b = a + 15; // b を a + 15 で初期化
printf("aの値は%dです。\n", a);
printf("bの値は%dです。\n", b);
return 0;
}実行結果
aの値は30です。
bの値は45です。このように、
宣言と同時に値を入れておくことで、安心して変数を使える
ようになります。
初期化子とは何か
宣言の中で = の右側に書かれている値は、
初期化子(initializer)
と呼ばれます。
int a = 30;| 要素 | 意味 |
|---|---|
| int | 変数の型 |
| a | 変数名 |
| 30 | 初期化子 |
初期化子で指定した値は、
変数が生成される瞬間に代入される
のが特徴です。
初期化と代入はタイミングが違う
見た目はよく似ていますが、
初期化 と 代入 は意味が異なります。
| 操作 | いつ値が入るか |
|---|---|
| 初期化 | 変数が生成されるとき |
| 代入 | 変数が生成されたあと |
初期化の例
int x = 10;これは、
「x を作ると同時に 10 を入れる」
という意味です。
代入の例
x = 10;こちらは、
「すでに存在する x に 10 を入れ直す」
という意味になります。
図でイメージしてみよう
- 初期化
・箱を作る
・すぐに値を入れる - 代入
・すでにある箱を使う
・中身を入れ替える

この違いを意識することが、
バグを防ぐ第一歩 になります。
複数の変数を同時に初期化する
複数の変数も、
次のようにまとめて初期化できます。
int p = 5, q = 9;これは、
- p を 5 で初期化
- q を 9 で初期化
していることを意味します。
この章で押さえておきたいポイント
| ポイント | 内容 |
|---|---|
| 宣言直後の変数 | 不定値が入っている。 |
| 初期化 | 生成時に値を入れる。 |
| 代入 | 生成後に値を入れる。 |
| おすすめ | 宣言と同時に初期化 |
使う前に必ず値を入れる
この習慣を身につけておくと、
プログラムはぐっと安全になります。
演習問題
演習 1-4
int 型の変数を宣言し、
実数値(たとえば 4.8)を初期化子として与える
プログラムを作成し、実行結果を確認せよ。
解答例
プロジェクト名:chap1-10-3 ソースファイル名:chap1-10-3.c
// int型変数に実数値で初期化してみる
#include <stdio.h>
int main(void)
{
int value = 4.8;
printf("valueの値は%dです。\n", value);
return 0;
}実行結果
valueの値は4です。実数値は int 型に代入される際、
小数点以下が切り捨てられる
ことが確認できます。
