買い物に行く前、メモに「牛乳」「卵」と書いておきます。あとで見返せるように、情報を紙という場所に置いておく。プログラムの変数も同じで、値をとっておくための名前付きの箱です。
箱の作り方
#include <stdio.h>
int main(void) {
int tanka = 250; // 宣言と同時に値を入れる(初期化)
int kosuu; // 宣言だけ
kosuu = 3; // あとから入れる(代入)
printf("%d 円 x %d 個 = %d 円\n", tanka, kosuu, tanka * kosuu);
return 0;
}int tanka = 250; は3つの意味を同時に持ちます。「整数用の箱を1つ用意する」「その箱に tanka という名札を付ける」「中身を250にする」。
箱を作ることを宣言、中身を入れることを代入、宣言と同時に入れることを初期化と呼びます。この3語は以後ずっと使うので、ここで区別しておきます。
箱には形(型)がある
箱を作るときは必ず型を指定します。型は箱の大きさと、入れられるものの種類を決めます。
・int … 整数(int。約 -21億〜21億)
・double … 小数(double)
・char … 1文字(char)
・bool … 真偽(bool。true / false)
上のビジュアライザで、型の違う3つの箱が積まれていく様子を1行ずつ確かめてください。型ごとに箱の大きさが違うという事実が、あとでポインタを学ぶときの土台になります。
名前の付け方
・使えるのは英数字と _。先頭に数字は置けません。
・大文字と小文字は別物(kosuu と Kosuu は違う箱)。
・int や return などの予約語は使えません。
・意味の分かる名前にします。a より kosuu、x より tanka。
代入は「右から左へコピー」
#include <stdio.h>
int main(void) {
int a = 5;
int b = 3;
a = b; // b の中身を a に写す
b = 100; // b だけ変わる
printf("a=%d b=%d\n", a, b);
return 0;
}出力は a=3 b=100 です。a = b; は「a と b をつなぐ」のではなく「その瞬間の b の中身を a にコピーする」。写し終えたあと、2つは無関係になります。
罠・注意
初期化しない箱の中身はゴミ。 int n; と書いただけで中を読むと、前に誰かが使った残骸が出てきます。0とは限りません。宣言したらすぐ初期化する癖をつけます。
同じ名前で2回宣言できない。 同じ範囲の中では、名札は1つだけです。
型に合わないものは静かに変形する。 int n = 3.7; は 3 になります。エラーにならず黙って削られるのが、Cの怖いところです。
まとめ
変数は名前付きの箱で、作るときに型で形が決まります。宣言・代入・初期化を区別し、宣言したらすぐ初期化。代入は右から左へのコピーで、コピー後は別々の箱です。