識別子
変数の名前は自由ですが、使える文字や記号は決められています。変数名や関数名など、特定の何かを識別するために使われる名前を総称して識別子と呼びます。これは、識別子は、トークンの種類の一種であることは、以前ご説明しました。
識別子は、必ず非数字から始まり、その後は数字、または非数時の任意の字列となります。非数時とは、大文字と小文字のアルファベット、そしてアンダーバー _ 記号のいずれかを表します。つまり、識別子の 1 文字は必ずアンダーバーかアルファベットから始まり、それ以降は数字を含めてもよいということになります。そのほか、認められていない記号を含めることはできません。また、C言語で定められているキーワードと同じ名前の識別子も禁止されています。
value
_x
result03
上記の名前は、すべて識別子として有効です。逆に、次のような識別子は認められません。
10x /*数時から始まっている*/
var? /*不正な記号 ? を使っている*/
short /*キーワード*/
変数や関数の名前を命名するときには、これら識別子の構文規則に注意してください。この規則に従っていれば、どのような名前を付けるかは自由です。
代入演算
変数は、計算結果などの値を保存するための、一種の入れ物のようなものです。変数を宣言しただけでは、未定義の適当な値が格納されているだけなので意味がありません。変数に値を保存するには、代入演算子と呼ばれる演算子を用いた代入式を書きます。変数に値を入れることを、代入と呼びます。代入演算子は = 記号を用い、次のように利用します。
変数名 = 式
代入演算子の左項は、常に変更可能な値でなければならないと定められています。この場では、代入演算子の左項には、値を入れる変数が来ると考えてください。そして右項には、変数に代入する値となる任意の式を指定できます。代入演算子は、最初に右項の式を評価し、その結果を左項に代入します。
int value;
value = 10;
上記の変数の宣言と代入演算は、正しく機能します。整数型の変数valueを宣言し、これに値10を代入しています。これ以降、変数valueは10を表す値として利用することができます。変数への代入は何度でも行うことができます。
変数は、定数と同じように名前を持った値として利用できるため、変数そのものを式の値とすることができます。
value + 10
たとえば、上記の式は変数valueの値と定数10を加算します。このときvalueの値が何かは実行時まで判定できません。プログラムを実行したときに、変数 valueに保存されている値と10が計算されるため動的な計算となります。
サンプル01
#include <stdio.h>
int main(void)
{
int x;
int y;
x = 10;
y = 100;
printf("x = %d\n", x);
printf("y = %d\n", y);
printf("x + y = %d\n", x + y);
return 0;
}
実行結果
サンプル01はint型の変数xとyを宣言し、これらの変数に代入演算子で値を保存しています。xには10を代入しているので、これ以降、変数xは10という値を返します。yにも、同じように100を代入しています。その後、これらの変数の値が正しく取り出せるかどうかprintf()関数で結果を出力しています。
初期化子
変数を宣言した後、最初の値が代入されることを初期化と呼びます。初期化されていない変数には、どのような値が入っているか分かりません。しかし、初期化されていない変数の値は、重要ではありません。もし、初期化されていない変数で計算などが行われていれば、それはプログラム自体が間違っています。変数の目的は値の保存と取り出しであり、最初の値を保存する前に、値を取得してはいけません。
変数を宣言してから、代入演算子で初期化することも可能ですが、変数宣言と同時に最初に保存する値を入れてしまうことも可能です。
型 変数名 = 式;
このときの = 記号は、代入演算子ではなく、初期化子と呼ばれる構文で定められた記号です。この場合、宣言した変数には、式で評価された値が格納されます。
サンプル02
#include <stdio.h>
int main(void)
{
int x = 10;
int y = 100;
printf("x = %d\n", x);
printf("y = %d\n", y);
return 0;
}
実行結果
サンプル02はint型の変数xとyの宣言と同時に初期値を設定しています。printf() 関数で変数の値を表示すると、宣言と同時に指定した値が、正しく格納されていることが確認できます。
複数の変数の同時宣言
同一の型であれば 1 度の宣言で複数の変数を宣言することができます。似たような性質の値を保存する変数を複数用意しなければならない場合に便利です。複数の変数を同時に宣言するには、カンマ , で識別子を区切ります。
型 変数名1, 変数名2, ... ;
上記のように、カンマ , で宣言する変数を区切ります。任意の変数を初期化することも可能です。
型 変数名1 = 式 , 変数名2 = 式 , ... ;
初期化する変数と、初期化しない変数を組み合わせることも可能です。
サンプル03
#include <stdio.h>
int main(void)
{
int x, y = 123;
x = 45;
printf("x = %d\n", x);
printf("y = %d\n", y);
return 0;
}
実行結果
サンプル03は、1回の変数宣言でxとyの2つのint型変数を宣言しています。x変数では初期化を行っていませんが、y変数は宣言と同時に初期化しています。このように、変数の初期化は、宣言する個々の変数ごとに行うことができます。