変数

スポンサーリンク

変数

次のプログラムは,変数を扱ったプログラムの例です。

#include <stdio.h>

int main(void)
{
    int m, n;      /* 整数型の変数 m, n を宣言 */
    double p, q;   /* 浮動小数点型の変数 p, q を宣言 */

    m = 123;
    n = 456;
    p = 1.23;
    q = 4.56;

    printf("%d\n", m);
    printf("%d\n", n);
    printf("%f\n", p);
    printf("%f\n", q);

    return 0;
}
123
456
1.23
4.56

変数の宣言は,変数の型名に続いて,変数名をコンマで区切って並べて書きます。
すべての変数は,使用する前に宣言しなければなりません。
また,変数の宣言はブロック { ... } の最初にまとめて書かなければなりません。

次のプログラムのように,宣言時に初期値を与えることもできます。
初期値を与えなかった変数には,ゴミの値が入ります (自動変数の場合)。

#include <stdio.h>

int main(void)
{
    int m = 123, n = 456;

    printf("%d\n", m);  /* 出力: 123 */
    printf("%d\n", n);  /* 出力: 456 */

    return 0;
}

一般に,変数は次の形式で宣言します。初期化子は省略可能です。

型名 変数名1 = 初期値1, 変数名2 = 初期値2, ...;

識別子

識別子 (変数名,関数名等) の字句規則は,次の通りです。
ここで言うアルファベットには,英字 a-z, A-Z 及びアンダースコア _ が含まれます。

  • 1 字目にはアルファベットを用いる
  • 2 字目以降にはアルファベットまたは数字を用いる

予約語には次のようなものがあります。

auto break case char const continue default do
double else enum extern float for goto if int long
register return short signed sizeof static struct
switch typedef union unsigned void volatile while

変数のスコープ

関数の中で宣言された変数 (仮引数を含む) を局所変数 (local variable),関数の外で宣言された変数を大域変数 (global variable) と呼びます。
局所変数は,変数が宣言されたブロックの中にスコープを持ちます。
大域変数は,変数が宣言された翻訳単位の中にスコープを持ちます。

#include <stdio.h>

int a = 123;   /* 大域変数 */

int main(void)
{
    int b = 456;   /* 局所変数 */

    {
        int c = 789;   /* 局所変数 */
    }

    printf("%d\n", a);  /* 可 */
    printf("%d\n", b);  /* 可 */
    printf("%d\n", c);  /* 不可 */

    return 0;
}

同一ブロック内で同名の変数を宣言することはできませんが,外側のブロックにある変数と同名の変数を宣言することはできます。
その際,外側の同名変数は不可視化されます。

#include <stdio.h>

int a = 123;

int main(void)
{
    int a = 234;

    {
        int a = 567;
        printf("%d\n", n);   /* 出力: 567 */
    }

    printf("%d\n", n);       /* 出力: 234 */

    return 0;
}
スポンサーリンク