📖 このページで覚えること
✅ 最低限ここだけ覚える
int は整数、double は実数、char は1文字
- 宣言:
int x; 代入: x = 5;
= は「等しい」ではなく「代入」
- 使う前に必ず初期化 (
int x = 0;)
⭐ 余裕があれば読む
- 型のサイズは処理系依存(典型値を覚える)
- 整数 ÷ 整数 は切り捨てになる罠
- オーバーフローは符号付きだと未定義動作
🎬
この講座を動画で見る(約8分)
スライド解説 + 音声ナレーション
変数とは ― データを記録する領域に名前をつけたもの
変数とは、データを記録しておく領域に固有の名前をつけたものです。
変数名:領域の名前 / 変数の値:格納されているデータ
必要なときに変数名を指定して、記録したデータにアクセスできます。
変数の記録領域 ― コンピュータの内部
パソコンの主な部品は3つ。変数の箱はメモリの中に作られます。
変数はココ
📦
メモリ (RAM)
実行中のデータを
一時的に置く作業場
💾
ストレージ
ファイルを永続保存
(SSD / HDD)
プログラムが終わるとメモリは解放 → 変数も消える。ファイルに残すのとは違います。
メモリの内部 ― ビット(0/1)の世界
メモリは {0, 1} の値を保存するビットの連続です。変数の値は連続する数ビットに記録され、変数名はその領域に名前をつけます。
メモリ上の int seisu = 5; の表現 (32ビット)
変数の種類 ― 「型」がある
変数には型があり、型ごとにメモリ上に確保される箱の数(バイト数)が異なります。
整数型 int
例: -2, -1, 0, 1, 2, 3, ...
小数点以下は計算されない
典型的には 4バイト(処理系により異なる)
int seisu = 5;
実数型 double
例: 1.2, -2.68, 3.14, 79.69, ...
小数を含む計算に使用
典型的には 8バイト(IEEE 754 倍精度)
double jissu = 3.14;
型のサイズ比較(典型値)
重要: C言語の規格は「int は少なくとも 16bit、long は少なくとも 32bit」などと下限のみを定めており、実際のサイズは処理系(コンパイラ+環境)に依存します。上のサイズは現在の多くのデスクトップ/Linux/macOS/gcc での典型値にすぎません。自分の環境で確認するには sizeof(int) を %zu で printf してください。
型は「箱の形」で選ぶ
どの型を使うかは入れたい値で決まります。迷ったら以下のフローチャート:
① 小数を使う?
→ はい: double (float より精度が高い)
→ いいえ: ②へ
② 文字を扱う? (1文字だけ)
→ はい: char
→ いいえ: ③へ
③ 整数を使う
→ 約21億 (±2,147,483,647) まで: int(ほぼ常にこれ)
→ もっと大きい: long long
| 型 | 用途の例 | 範囲の目安 |
int | 個数、インデックス、点数 | 32bit環境で 約 -21億 〜 +21億 |
long long | 人口、秒数、大きなID | 最低 64bit、約 ±9.2 × 1018 |
double | 身長、平均、確率、座標 | IEEE 754 なら 15〜17桁の有効数字 |
char | 1文字 ('A'、'あ' はNG) | 通常 -128 〜 127(※ 符号は処理系依存) |
unsigned int | マイナスが出ないサイズ値 | 32bit環境で 0 〜 約42億 |
初学者の鉄則: 迷ったら 整数は int、小数は double。float や short、long を自分から選ぶ必要はほぼありません。
初学者がハマる「型」の罠
罠1: 整数÷整数 は切り捨て
これはC言語入門者が最初に必ずハマる罠です。
int a = 7;
int b = 2;
double r = a / b; // rは 3.0 になる! (3.5ではない)
printf("%f\n", r); // → 3.000000
なぜ? int 同士の割り算は int の結果になるから。7/2 はまず int として 3 と計算され、その後 double に変換される。
// 正しく 3.5 にするには片方を double に
double r = (double)a / b; // → 3.5
// または最初から double で宣言
double a = 7, b = 2;
double r = a / b; // → 3.5
罠2: int の上限を超える(オーバーフロー)
32bit int は約 ±21億までしか表現できません。日本の人口は入るが、世界の人口は入らない。
int big = 2000000000; // 20億
big = big + 2000000000; // 40億...になるはず
printf("%d\n", big); // 結果は未定義 (実機ではしばしば負の値が出る)
重要: C言語の規格では、符号付き整数のオーバーフローは「未定義動作 (undefined behavior)」です。「うまく壊れて負の値になる」と暗記してはいけません。コンパイラはこれが起きない前提で最適化することがあり、予測不可能な結果(ループが消える、プログラムが異常動作する等)になり得ます。
参考: unsigned 型のオーバーフローだけは「2の冪で折り返す」と規格で明確に定義されています。
安全側に倒すには:
① long long(%lld)を使って範囲を広げる、
② INT_MAX(<limits.h>)と比較して事前にチェックする、
③ -fsanitize=undefined で gcc/clang にランタイム検出させる、のいずれか。
罠3: 書式指定子の型ミス
printf の書式と変数の型を合わせないと、画面に変な値が出たり未定義動作になります。
| 型 | 書式 | 例 |
int | %d | printf("%d", 42); |
double | %f or %lf | printf("%f", 3.14); |
char | %c | printf("%c", 'A'); |
char * (文字列) | %s | printf("%s", "hello"); |
long long | %lld | printf("%lld", 9000000000LL); |
罠4: 初期化していない変数
int x; // 宣言のみ。中身は不定
printf("%d\n", x); // → ゴミ値(毎回違うことも)
// 正しくは:
int x = 0; // 0 で初期化
必ず初期化する習慣を: Cは「使う前に値を保証する」言語ではない。自動でゼロにしてくれるPythonなどと違う。
罠5: 変数名のルール
- 英数字と
_ のみ(ひらがな・漢字NG)
- 数字から始められない(
1st はNG、first はOK)
- 予約語は使えない(
int、if、return など)
- 大文字・小文字は区別される(
age と Age は別物)
- 意味のある名前を付ける:
a より score、x1 より radius
宣言・代入・上書き
変数を使うには、まず宣言してメモリに領域を確保し、代入で値を格納します。
int seisu; // 宣言:メモリに変数の領域を確保
seisu = 5; // 代入:値を格納 ( = は「等号」ではなく「代入」!)
注意: = は等号ではなく代入です!右辺の値を左辺の変数に格納します。
宣言していない変数に代入するとエラー: x = 23; → 「xってどこ???」
上書きの仕組み
変数に新たな値を代入すると、前の値は上書きされて消えます。同じ領域に記憶できる情報は一つだけ。
別の変数の値を代入
x = y; とすると、yの値がxにコピーされます(yの値は変わりません)。
const ― 「変えない」と約束する変数
宣言に const を付けると、初期化のあとに値を変更できない変数になります。「この値は変わらない」という意図をコードで表せて、うっかり書き換えるとコンパイラがエラーで教えてくれます。
const double TAX_RATE = 0.10; // 消費税率(変えない値)
const int MAX_SCORE = 100; // 満点(変えない値)
TAX_RATE = 0.08; // ← コンパイルエラー!const は書き換え禁止
💡 使いどころ: 何度も出てくる「意味のある固定値」(税率・上限値など)は
const にしておくと、値の変更が宣言の1か所で済み、書き換え事故も防げます。関数の引数やポインタと組み合わせた使い方は
実践C言語(const・enum・typedef)で扱います。
ステップ実行 ― 変数の変化を追う
自分で書いてみよう ― 変数
💡 こんなことも試してみよう
int に -100 のような負の値を入れて %d で表示
int に 3000000000 を入れてみる(オーバーフロー)
double x = 7 / 2; と double x = 7.0 / 2; の違いを確認
char c = 'A'; を %d で表示して ASCIIコードを見る
確認クイズ
この講座の理解度をチェックしましょう!
Q1. int 型の変数に格納できるのは?
小数
整数
文字列
int 型は整数を格納します。小数には float や double、文字列には char 配列を使います。
Q2. 次のうち、正しい変数名はどれ?
2value
my_var
int
変数名は英字またはアンダースコアで始める必要があります。数字で始まる名前や予約語(int など)は使えません。
Q3. double 型と float 型の違いは?
double の方が精度が高い
float の方が精度が高い
違いはない
double は倍精度浮動小数点数(約15桁)、float は単精度(約7桁)です。通常は double を使うことが多いです。
この講座の理解を深めるおすすめ書籍
サイトで動きを理解し、書籍で演習量を補うと効果的です
📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。丁寧な解説で基礎を固められます。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で、演習問題も充実。大学の教科書としても採用多数。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。基礎を終えた後のステップアップに最適。
Amazonで見る
※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。