変数と型: データの箱とサイズ

「型」とは「メモリサイズ」のことである。

変数
メモリ上の特定の場所(アドレス)とサイズを持つ領域。
初期化
変数を宣言した直後に有効な値を入れること。
sizeof
型のメモリサイズ(バイト数)を調べる演算子。

詳細解説

駐車場と車種 (Parking Spots)

C言語の型は「駐車場の区画サイズ」です。 ・`char` = バイク専用 (1 byte) ・`int` = 普通車 (4 bytes) ・`double` = 大型トラック (8 bytes) 動的型付け言語と違い、一度「ここはバイク用」と決めて白線を引いたら、そこにトラックを停めることはできません(はみ出して隣の車を破壊します=メモリ破壊)。

変数の正体

C言語における変数は、単なる「値を入れる箱」ではありません。 「メモリ上の特定の場所(アドレス)」と「そこから何バイト使うか(サイズ)」 を持つ領域のことです。

PythonやJavaScriptなどの動的型付け言語と異なり、C言語では 「型 = メモリサイズ」です。int 型と決めたら、そこには常に4バイト(環境による)分の領域が確保され、それ以外のものは入りません。

初期化の重要性

変数を宣言した直後(int a;)、その場所には何が入っているでしょうか? 答えは「ゴミ(不定値)」 です。前回そのメモリを使っていたプログラムの残骸が入っています。初期化せずに使おうとすると、予期せぬ巨大な数字が出てきたり、バグの原因になります。

基本型

Declaration & Initialization
// 1. 変数宣言(場所の確保)
int age; // 4 bytes allocated (contains garbage!)
// 2. 初期化(値の代入)
age = 20;
// 3. 宣言と初期化を同時に(推奨)
int score = 100;
double weight = 60.5;
char grade = 'A';
Common Types
// 基本的な型とサイズ(環境依存あり)
char c = 'A'; // 1 byte (-128 ~ 127)
int i = 100; // 4 bytes (-21億 ~ +21億)
double d = 3.14; // 8 bytes (巨大な実数)
// サイズを確認する
printf("int: %zu bytes\n", sizeof(int));

実践テクニック

現代の標準: stdint.h

「int型は何ビットか?」という議論は、環境によって異なるため不毛です。現代のC言語(組み込みやプロフェッショナルな現場)では、サイズが明確な型を使います。

Fixed Width Integers
#include <stdint.h>
// 現場の標準: サイズ固定整数型
// 「intが何バイトか」で悩まなくて済む
int32_t price = 1000; // 必ず 32bit (4 bytes)
uint8_t byte = 255; // 必ず 8bit (0~255)
int64_t large = 90000; // 必ず 64bit (8 bytes)

命名規則

Standard: C言語(特にLinux界隈)では、変数は スネークケース (user_id, packet_size) が好まれます。キャメルケース (userId) はあまり使いません。

演習課題

課題1: サイズ確認
sizeof演算子を使って、自分の環境での char, int, double のバイト数を表示してください。
課題2: オーバーフロー体験
char型(最大127)の変数に 128 を代入して表示してみてください。何が起きますか?
解答例を見る

-128 と表示されることが多いです。

ビット表現が 01111111 (127) から 10000000 になり、最上位ビットが1になったことで「負の数(2の補数)」として解釈されるためです。これをオーバーフローと呼びます。

合格ライン

型が「メモリサイズ」であることを理解している
変数を必ず初期化する習慣がついている
int32_t などの固定長整数型を知っている