『変数』とは一体何なのでしょうか…?
変数って一体何なの…?
前回の記事で『文字や数値を画面に表示する方法』をマスターすることができました。


でも、文字や数値を表示させるときに「表示する数値や文字って変えられないの?」と思われたのではないでしょうか…?
表示させる文字や数値を変えるには『変数』を使えばOKです。
本記事では、プログラムで必ず使う『変数』を分かりやすく解説しておりますので、ぜひ参考にしてみてください。
気になるところへGO!
そもそも『変数』って何なの…?

変数とは『人間が何度でも変更できるデータ』のことです。
しかし、この表現だとあまりピンと来ないと思いますので、変数の簡単な仕組みをご紹介いたしますね。
すでにご存知かもしれませんが、コンピュータはプログラムを実行する際に、メモリという場所にたくさんのデータを保存しています。
このメモリはデータを保存できるロッカーのようなものなんです。

このロッカーが10個くらいであれば、データを保存した場所を簡単に思い出せそうな気がしますよね。
でも、実際にはこのようなロッカーが10億個以上あります。
こんな大量のロッカーから欲しいデータを探すのは、時間がかかって大変だと思いませんか?
変数を使う場合、データの保存方法が少し変わります。
『このデータは何回か書き換えるよ!』とコンピュータに伝えておくことで、VIP専用ロッカーを使うことができるのです。
このVIP専用ロッカーには、データを素早く見つけられるような工夫が施されています。
ロッカーの数が限定されているうえに、コンピュータ(CPU)に近い場所に設置されているのです。
その結果、データを何回も書き換えるプログラムを実行しても、早いスピードで処理することができるようになります。

RAMという用語をご存知であれば、『メモリのデータは全て書き換えられるのでは?』と思われたことでしょう。
確かにその通りなのですが、プログラムを実行するときは少し違います。
RAMにヒープ領域というプログラム専用のメモリ領域を作成するのです。
このヒープ領域にはRAM領域とROM領域の両方を作るので、ROM領域は一時的に書き換えられないメモリとなります。
変数の使い方

ここからは変数を使う方法を一緒に見ていきましょう!
C言語で変数を使いたいときは、次のようなコードを記載します。
型式 変数名;
このコードは『変数宣言』と呼ばれるもので、『int num;』というように書きます。
そうすると、『num』に専用VIPロッカーが割り当てられ、『num』に変数を保存できるようになるのです。
なお、変数宣言で出てくる型式とは『保存したいデータの種類』のことです。
今の段階では『文字、整数、実数(小数)』などと認識していただければOKですよ。
なぜ変数宣言に型式を書く必要があるかというと、データの種類によって必要なロッカーの数が変わるからです。
準備されたロッカーよりサイズが大きいデータはロッカーに入りませんよね?
なので、大きなデータを保存するためには、ロッカーのサイズを大きくしなければいけないんです。
実はメモリには『ロッカーの大きさを変更する機能』がついています。
なので、サイズの大きなデータを保存したい場合は、仕切りを移動させて大きなロッカーを作ることができるのです。

ロッカーのサイズを変更できるなら、どんなデータでも保存できるように思えるのですが…
ロッカーのサイズ変更は、プログラムをコンパイルするときにしかできません。
そのため、プログラムのコードに必要なロッカーのサイズを書いておく必要があるのです。
このロッカーのサイズを決めるコードが先ほどの『変数の型式』になります。
どのような種類のデータを保存するのか明確にすることで、コンパイルするときにロッカーのサイズを変更するようにしているのです。
変数の型式の決め方

変数宣言に型式が必要であることがわかったら、さっそく型式の選び方を覚えてしまいましょう。
型式の決め方はとってもシンプルです。
変数に保存したいデータの種類を考えて、次の一覧表から選べばいいんですよ。

まずは、整数の型式である①~⑥を見ていきましょう。
整数を表示する基本的な型式は『①int』『②short』『③long long』になります。
これらの型式の大きな違いは保存できる数値の範囲です。
使いどころに迷ってしまいそうですが、ほとんどの場合『int』を使えば事足りるので、最初のうちは『整数の保存 = int』と覚えておきましょう。
マイナスの整数を使わない場合は、ご紹介した型式に『unsigned』を付けることができます。
『-』を保存するメモリを正の値を保存するために使うので、保存できる正の整数を2倍にすることができるんです。(表の④⑤⑥)
続いては⑦の『char』という型式を見ていきましょう。
『char』は文字を保存するために使われる型式になります。
しかし、実際には文字を整数に変換して保存しているので、小さい整数の保存も可能です。
そのため、整数の型と同じようにunsignedを付けることもできます。
最後にご紹介するのは実数です。
ご存知だと思いますが、実数とは3.14などの小数を意味しています。
この実数を使いたいときは、『float』か『double』の型式を使えばいいんです。
ここで気になるのは『float』と『double』のどちらを使えばいいのかという点ですよね。
正直『float』でも良さそうな気がするのですが…
桁数が少ない『float』だと四捨五入などで計算誤差が大きくなってしまうことがあるんです。
なので、実数を使うときは迷わず『double』と覚えておきましょう。
スイッチのON/OFFなどを整数で表すboolという型もあります。
ONを1、OFFを0で表現する型式なのですが、最初はあまり使わないので、今は気にしなくても大丈夫です。
変数を使う際の注意点

型式が決まれば変数を使えるのですが、気を付けなければいけないポイントがあるんです。
それは、ロッカーの中に残っているゴミなんですよ。
次のプログラムをコピペして実行してみてください。
#include<stdio.h>
int main(void){
int i;
printf("%d\n",i+3);
return 0;
}
こちらのプログラムは『i+3』の計算結果を表示するプログラムです。
この例では変数iに数値を代入していないので、0+3の計算結果である3が表示されるように思いますよね。
しかし、このプログラムを実行すると『3』ではない数値が表示されることがあります。
しかもこれはバグではなく、プログラムの正しい動作なんです。
プログラムが正常なら、なぜ先ほどのような実行結果になったのでしょうか?
それは、変数iで使おうとしたVIPロッカーの中にゴミデータがあったからなんです。

一般的にロッカーに保存したデータは使ったあとも消去されずにそのまま放置されます。
ロッカーを空にするプログラムを書かない限り、ロッカーの中にあるデータは残存するんです。
このような背景から、ロッカーの中には基本的にゴミデータが残っています。
しかも、ロッカーは別のプログラムが使用するときもあるので、ゴミデータの値は変わるときがあるんです。
そのため、同じプログラムを実行しても、計算結果が変わっていくんですよ。
もしかしたら、あなたのPCではきちんと『3』が表示されたかもしれません。
それはあなたのPCに搭載されているコンパイラが高性能だからです。
その場合、自動的に初期化されて正しい計算結果になります。
ただ、仕事で使うコンパイラは必ずしも高性能とは限りません。
そのため、日頃から初期化する習慣を身に付けておいた方がバグを少なくすることができますよ。
変数を初期化する方法

先ほどの現象を回避するためには、初期化をすればOKです。
初期化とは変数の宣言と同時に値を代入することで、次のような書き方で実行できます。
型式 変数名 = 初期値;
先ほどのプログラムで『int i;』と書かれていた部分を『int i = 0;』に変えればいいのです。
そうすれば、変数iに0を代入することができ、0+3の計算を確実に実行することができます。
その結果、画面に表示される数値も3になるのです。
まとめ
以上が変数の詳しい解説になります。
変数がどのようなものか分かっていただけたのではないでしょうか?
次の記事では変数を使った計算方法をご紹介いたしますので、この後のまとめをしっかりと覚えておきましょう!

