変数

変数とは

変数 (variable) はデータ値を入れておく「入れ物」です。変数には値を設定したり、そこから値を取得したり、値を変更することができます。
int a, b;
a = 123; // a に 123 を設定する
b = a; // a の値 (123) を取得して、b に設定する
b = a + b; // a + b の値 (123 + 123 = 246) を b に設定する
b += 10; // b の値を 10 増やす (256 になる)

変数の宣言

変数は、使用する前に宣言する必要があります。変数宣言の例をいくつか示します。
int a; // 整数の宣言
static int b; // 静的変数の宣言
const int c; // 定数の宣言
char* d; // 文字へのポインタ (文字列) の宣言
char** e; // 文字へのポインタ (文字列) へのポインタの宣言
struct { int a; char* p; } f; // 構造体の宣言
int (*g)(); // int を返す関数へのポインタの宣言

変数の宣言は、関数内でも関数外でも可能です。

関数内で宣言する場合は、実行文 (式文や制御文) の後に宣言文を置くこともできます。[C99]
void func( int a ) {
  a++;
  int b; // 実行文 a++ の後で宣言を行う
  ...

変数のスコープ

変数は、関数の中で宣言することも、関数の外で宣言することもできます。変数を宣言した場所と、記憶クラス static によって、その変数のスコープ (有効範囲、つまり変数を使用できる範囲) と、変数の生存期間が次のように決まります。

宣言した場所static の有無スコープ生存期間
関数外 プログラム全体プログラム実行中
関数外staticファイル全体プログラム実行中
関数内 関数内関数実行中
関数内static関数内プログラム実行中

関数外で宣言した非 static 変数を広域変数 (グローバル変数) と呼び、関数内で宣言した変数を局所変数 (ローカル変数) と呼びます。広域変数は、複数のファイルで共有されます。

関数内のさらにブロック ({...}) 内で変数を宣言すると、変数のスコープはそのブロック内に限定されます。

参照   静的関数