C言語の基本

【必ず使う】C言語の変数って一体何なの…?宣言・初期化のやり方もご紹介!

トビタカ
トビタカ
本記事ではC言語のプログラミングで必ず使う『変数』の解説をしています。

『変数』とは一体何なのでしょうか…?

 

変数って一体何なの…?

 

前回の記事で『文字や数値を画面に表示する方法』をマスターすることができました。

【初めてのC言語】まずはprintf関数で文字列を画面に表示してみよう本記事ではC言語の初心者向けに『画面に文字列を表示するプログラムの書き方』をご紹介しています。C言語で文字列を画面に表示するやり方とは…?...
【初心者向けC言語】文字列の次は数値を表示してみよう!本記事ではC言語を勉強し始めた『あなた』に向けて、数値を表示する方法をご紹介しています。C言語で数値を自由自在に表示するその方法とは…?...

 

でも、文字や数値を表示させるときに「表示する数値や文字って変えられないの?」と思われたのではないでしょうか…?

とび助
とび助
激しく思いました!
トビタカ
トビタカ
まぁ、その通りですよね。

 

表示させる文字や数値を変えるには『変数』を使えばOKです。

本記事では、プログラムで必ず使う『変数』を分かりやすく解説しておりますので、ぜひ参考にしてみてください。

トビタカ
トビタカ
変数の仕組みを理解すると、プログラムを書くスピードも上がりますよ!
とび助
とび助
なら、勉強させてもらいます!

そもそも『変数』って何なの…?

とび助
とび助
そもそも変数って何ですか…?
トビタカ
トビタカ
何度も書き換えられるデータのことです。

 

変数とは『人間が何度でも変更できるデータ』のことです。

しかし、この表現だとあまりピンと来ないと思いますので、変数の簡単な仕組みをご紹介いたしますね。

 

すでにご存知かもしれませんが、コンピュータはプログラムを実行する際に、メモリという場所にたくさんのデータを保存しています。

このメモリはデータを保存できるロッカーのようなものなんです。

メモリのイメージ(ロッカー)

 

このロッカーが10個くらいであれば、データを保存した場所を簡単に思い出せそうな気がしますよね。

でも、実際にはこのようなロッカーが10億個以上あります

こんな大量のロッカーから欲しいデータを探すのは、時間がかかって大変だと思いませんか?

とび助
とび助
たしかに大変そうです…
トビタカ
トビタカ
そこで役立つのが変数です!

 

変数を使う場合、データの保存方法が少し変わります。

『このデータは何回か書き換えるよ!』とコンピュータに伝えておくことで、VIP専用ロッカーを使うことができるのです。

 

このVIP専用ロッカーには、データを素早く見つけられるような工夫が施されています。

ロッカーの数が限定されているうえに、コンピュータ(CPU)に近い場所に設置されているのです。

その結果、データを何回も書き換えるプログラムを実行しても、早いスピードで処理することができるようになります。

変数が使用できるVIP専用ロッカー
トビタカ
トビタカ
つまり、変数は『VIP専用ロッカーに保存されている何度も書き換えられるデータ』と覚えて下さいね!
とび助
とび助
完璧に理解しました!

RAMという用語をご存知であれば、『メモリのデータは全て書き換えられるのでは?』と思われたことでしょう。

確かにその通りなのですが、プログラムを実行するときは少し違います。

RAMにヒープ領域というプログラム専用のメモリ領域を作成するのです。

このヒープ領域にはRAM領域とROM領域の両方を作るので、ROM領域は一時的に書き換えられないメモリとなります。

変数の使い方

ここからは変数を使う方法を一緒に見ていきましょう!

C言語で変数を使いたいときは、次のようなコードを記載します。

C言語の変数宣言

型式 変数名;

 

このコードは『変数宣言』と呼ばれるもので、『int num;』というように書きます。

そうすると、『num』に専用VIPロッカーが割り当てられ、『num』に変数を保存できるようになるのです。

 

なお、変数宣言で出てくる型式とは『保存したいデータの種類』のことです。

今の段階では『文字、整数、実数(小数)』などと認識していただければOKですよ。

とび助
とび助
なんで型式が必要なんですか…?
トビタカ
トビタカ
鋭い質問ですね!

 

なぜ変数宣言に型式を書く必要があるかというと、データの種類によって必要なロッカーの数が変わるからです。

準備されたロッカーよりサイズが大きいデータはロッカーに入りませんよね?

なので、大きなデータを保存するためには、ロッカーのサイズを大きくしなければいけないんです。

とび助
とび助
そんなことできるんですか?
トビタカ
トビタカ
もちろんできますよ!

 

実はメモリには『ロッカーの大きさを変更する機能』がついています。

なので、サイズの大きなデータを保存したい場合は、仕切りを移動させて大きなロッカーを作ることができるのです。

メモリのロッカーサイズ変更機能
とび助
とび助
ということは、どんなデータでも保存できるんですね!
トビタカ
トビタカ
基本的にはそうなんですが、注意点があるんです…

 

ロッカーのサイズを変更できるなら、どんなデータでも保存できるように思えるのですが…

ロッカーのサイズ変更は、プログラムをコンパイルするときにしかできません。

そのため、プログラムのコードに必要なロッカーのサイズを書いておく必要があるのです。

 

このロッカーのサイズを決めるコードが先ほどの『変数の型式』になります。

どのような種類のデータを保存するのか明確にすることで、コンパイルするときにロッカーのサイズを変更するようにしているのです。

トビタカ
トビタカ
だから、コードで型式を書く必要があるんです。
とび助
とび助
なるほど~

変数の型式の決め方

変数宣言に型式が必要であることがわかったら、さっそく型式の選び方を覚えてしまいましょう。

型式の決め方はとってもシンプルです。

変数に保存したいデータの種類を考えて、次の一覧表から選べばいいんですよ。

とび助
とび助
結構たくさんあるんですね…
トビタカ
トビタカ
種類はたくさんありますが、今は2つ覚えれば大丈夫ですよ!

 

まずは、整数の型式である①~⑥を見ていきましょう。

整数を表示する基本的な型式は『①int』『②short』『③long long』になります。

これらの型式の大きな違いは保存できる数値の範囲です。

使いどころに迷ってしまいそうですが、ほとんどの場合『int』を使えば事足りるので、最初のうちは『整数の保存 = int』と覚えておきましょう。

トビタカ
トビタカ
まずは整数のときはintを使うようにしましょう!
とび助
とび助
了解っす!

マイナスの整数を使わない場合は、ご紹介した型式に『unsigned』を付けることができます。

『-』を保存するメモリを正の値を保存するために使うので、保存できる正の整数を2倍にすることができるんです。(表の④⑤⑥)

 

続いては⑦の『char』という型式を見ていきましょう。

『char』は文字を保存するために使われる型式になります。

しかし、実際には文字を整数に変換して保存しているので、小さい整数の保存も可能です。

そのため、整数の型と同じようにunsignedを付けることもできます。

トビタカ
トビタカ
文字変数を使うときに詳しく解説しますので、今は『char』という型がある事を知っておくだけでOKですよ!

 

最後にご紹介するのは実数です。

ご存知だと思いますが、実数とは3.14などの小数を意味しています。

この実数を使いたいときは、『float』か『double』の型式を使えばいいんです。

 

ここで気になるのは『float』と『double』のどちらを使えばいいのかという点ですよね。

正直『float』でも良さそうな気がするのですが…

桁数が少ない『float』だと四捨五入などで計算誤差が大きくなってしまうことがあるんです。

なので、実数を使うときは迷わず『double』と覚えておきましょう。

トビタカ
トビタカ
今は整数はint、実数はdoubleと覚えておけばOKです!
とび助
とび助
バッチリ覚えました!

スイッチの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ロッカーの中にゴミデータがあったからなんです。

ロッカーに入っているゴミデータのイメージ

 

一般的にロッカーに保存したデータは使ったあとも消去されずにそのまま放置されます。

ロッカーを空にするプログラムを書かない限り、ロッカーの中にあるデータは残存するんです。

とび助
とび助
どうして消さないんですか…?
トビタカ
トビタカ
上書きすればいいだけなので、わざわざ消去しないんです!

 

このような背景から、ロッカーの中には基本的にゴミデータが残っています。

しかも、ロッカーは別のプログラムが使用するときもあるので、ゴミデータの値は変わるときがあるんです。

そのため、同じプログラムを実行しても、計算結果が変わっていくんですよ。

とび助
とび助
何とかならないんですか…?
トビタカ
トビタカ
『初期化』という方法を使えばOKです!

もしかしたら、あなたのPCではきちんと『3』が表示されたかもしれません。

それはあなたのPCに搭載されているコンパイラが高性能だからです。

その場合、自動的に初期化されて正しい計算結果になります。

 

ただ、仕事で使うコンパイラは必ずしも高性能とは限りません。

そのため、日頃から初期化する習慣を身に付けておいた方がバグを少なくすることができますよ。

変数を初期化する方法

先ほどの現象を回避するためには、初期化をすればOKです。

初期化とは変数の宣言と同時に値を代入することで、次のような書き方で実行できます。

初期化のやり方

型式 変数名 = 初期値;

 

先ほどのプログラムで『int i;』と書かれていた部分を『int i = 0;』に変えればいいのです。

そうすれば、変数iに0を代入することができ、0+3の計算を確実に実行することができます。

その結果、画面に表示される数値も3になるのです。

トビタカ
トビタカ
もちろん初期値には0以外の数値も入力できますよ!
とび助
とび助
これで、計算の幅が広がりますね!

まとめ

以上が変数の詳しい解説になります。

変数がどのようなものか分かっていただけたのではないでしょうか?

次の記事では変数を使った計算方法をご紹介いたしますので、この後のまとめをしっかりと覚えておきましょう!

変数の使い方のまとめ
とび助
とび助
変数をきちんと理解することができました!
トビタカ
トビタカ
それはよかったです!次はキーボードで変数に数値を入力してみましょう!
【C言語】scanf関数でキーボードから数値を入力をしてみよう! C言語でキーボードから数値を入力することってできないの…? 前回の記事で変数を使えるようになりました! ...

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA