== もっと複雑なことをしたい ==
前回、C言語を使って簡単ながらも計算をするプログラムを書きました。<
>
しかしこのままでは決まった計算しかできません。もっと柔軟に計算をできるようにしたいと思うのが普通でしょう。<
>
そこで、新しい概念を学ぶことにします。
== 変数とは ==
ここで新しく変数というものを覚えましょう。<
>
変数というのはものすごくおおっぴろげに言ってしまうと「データを入れておく箱」です。<
>
複雑な計算をするときに、計算の途中結果をどこかにおいておきたいという事が起きます。そういう時に変数を使うわけです。<
>
早速変数を使って簡単なプログラムを作ってみましょう。
{{{#!highlight c
#include
int main (void)
{
int a;
a = 1;
printf("%d\n", a);
return 0;
}
}}}
実行してみましょう。aという名前のプログラムだとします。
{{{
% ./a
1
}}}
1という数を画面に出力するプログラムでした。
== 変数の宣言と初期化(1) ==
それではこのプログラムのどこに変数が使われているのかを調べてみましょう。<
>
5行目を見てください。
{{{
int a;
}}}
これがまぎれもない変数を使おうとしている部分です。'''int'''は整数を入れる箱、すなわち変数という意味です。「int型の変数」と呼びます。<
>
C言語では文字を格納する変数、整数を格納する変数、小数を格納する変数、などがそれぞれ区別されています。<
>
そのうち整数を格納する目的で最もよく使われるのがintなのです。<
>
(このあたりの説明は実は全然厳密じゃないので、別の項目でしっかり行います)<
>
その後ろの'''a'''はその変数の名前です。<
>
つまりこの行は'''「aという整数を入れることができる変数を作ってください」'''または'''「aというint型の変数を作ってください」'''という意味になるわけです。<
>
このようにして変数をつくることを'''宣言'''といいます。この言葉はよく出てくるので覚えておきましょう。<
>
<
>
しかしこのままでは変数は使えるような状態になっていません。なぜなら変数という箱に何を入れておくのかが決まっていないからです。<
>
もっと言ってしまえば、変数に何が入っているのかわからない状態になっているのです。<
>
(このあたりの話はメモリの話が出てきたときにすることにします)<
>
という訳でとりあえず変数に何かを入れることにしましょう。<
>
その記述が次の6行目で、
{{{
a = 1;
}}}
というものです。これは'''「1をaに入れなさい」'''という意味です。
変数にデータを入れることを'''代入'''といいます。<
>代入という言葉を使えば'''「1をaに代入しなさい」'''とも言えるわけです。<
>
代入によって変数の初期値を定めることを'''初期化'''といいます。<
>
初期化という言葉を使えば'''「aを1で初期化した」'''という言い方も出来ます。<
>
== 変数の宣言と初期化(2) ==
複数の変数をまとめて宣言することができます。行が減らせるのでよく使われます。
{{{
int a, b;
}}}
こう書けば、「int型の変数a, bをつくりなさい」という意味になります。<
>
<
>
また宣言と初期化は同時に行うことができます。
{{{
int a = 0;
}}}
「int型変数aを宣言し0で初期化した」ことになります。
== 変数の使用 ==
変数を使うには、変数を使いたいところにその変数名を書けばよいです。上のプログラムでは7行目がそれに当たります。
{{{
printf("%d\n", a);
}}}
これまではaではなく具体的な数や数式を書いてきましたが、ここにaと書けば、aという変数の中身という意味になるわけです。<
>
つまり「aという変数の中身を表示しなさい」という意味になるわけですね。<
>
<
>
べつにprintfに限らなくても、変数は自由に使えます。例えばこんなことをしてみましょう。
{{{#!highlight c
int a, b, c;
a = 2;
b = 3;
c = a + b;
}}}
a, b, cというint型の変数を宣言して、aは2、bは3で初期化しています。<
>
ポイントは4行目で、'''「aという変数の中身とbという変数の中身を足してcという変数に代入しなさい」'''という意味になります。<
>
分かる人もいると思いますが、cの中身は5になりますね。<
>
<
>
さらに言えばこんな書き方もできちゃいます。
{{{#!highlight c
int a, b;
a = 2;
b = 3;
a = a + b;
}}}
なんか4行目が変な気がする人が多いと思いますが、「aとbを足して、aに入れなおす」と解釈すればすっきりするんじゃないでしょうか。<
>
この場合aの中身は上書きされて5になり、bは3のままです。<
>
<
>
この書き方を応用すれば、こんなこともかけますね。
{{{#!highlight c
int a = 0;
a = a + 1;
}}}
aの中身は何になるでしょうか?少し考えてみてください。<
>
<
>
<
>
1ですね。aという変数が0で初期化され、2行目で'''「aと1を足したものをaに入れなおす」'''ということをしているわけですから。