初めに
この記事の対象者はプログラミング初心者。 授業の復習がてら自分の言葉でまとめています。
変数とは
よく変数とは値を入れておく箱だと言われる。 どういうことだろうか?
変数は中にデータを入れて、扱いやすくするための魔法の箱である。 一度用意した箱は簡単に増やせるし、何度も利用することができる、その中に値を入れ直すこともできる。 非常に便利。
具体的なイメージを掴むために、コードを見てみよう。
#include<stdio.h>
int main()
{
int a;
int b;
int sum;
a = 10;
b = 20;
sum = a + b;
printf("output\n");
printf("%d+%d=%d\n", a, b, sum);
}
このコードの中の変数の定義部分を見てみる。
// 変数定義部分
// int(数字)タイプのデータが入る箱「a」を用意している
int a;
// 同様に数字が入る箱「b」を用意している
int b;
// 同様に箱「sum」を用意している
int sum;
// 変数にデータを入れている部分
// 箱「a」の中に10を入れてみた
a = 10;
// 箱「b」の中に20を入れてみた
b = 20;
// 箱「sum」の中にaとbの箱の中身を合計したものを入れてみた
sum = a + b;
解説を付け足してみた。 ここで出てくるデータのタイプのことを、プログラミング言語の文脈的には「型」と呼ぶ。
日本語でこの流れを説明すると、
- 数字型を入れることができる箱「a」「b」「sum」を用意する
- aとbに10と20を入れる
- sumにaとbに入っている値の合計を入れる
変数の約束事
先ほどの説明でなんとなく変数の使い方がわかったと思う。
しかし先ほどの例はうまく動く例をわざと出しただけで、実際にはうまく動かないことも多い。
変数を使うときには守らなければいけないルールがある。
- 最初に決めた型(intとか)を変えることはできない(下のコラムのような例外はある)
- 変数に対して行えるのは「値をみる」「値を入れる」の二つだけ
- 「値を入れる」と元々の値は上書きされる
- 「値をみる」だけでは値は変わらない
- 型と違うタイプのデータは入れることはできない
#### コラム 変数の「型」について面白い実験をしてみよう
以下のような10を3でわるコードを書いたとする
#include<stdio.h>
// 10を3でわる
int main(){
int a = 3,b = 10;
float c;
c=b/a;
// 小数点第3位まで表示する
printf("%.3f\n",c);
}
一見すると3.333が出力されるような気がする。 しかし実際の出力を見ると
3.000
が出力されるはずだ。
これは b / aをした時点でその答えがint型になってしまうことが原因だ。
10 ÷ 3 = 3 余り 1
になるのだ。
結果的にcに代入する前に余りが切り捨てられて3になり、それをfloat型のcに代入されるときに3.000になるということだ。
解決策は二つ 一つ目は単純でint型で定義しているaとbをfloat型にしてしまう方法。
もう一つは以下の書き方だ
#include<stdio.h>
int main(){
int a = 3,b = 10;
float c;
c=(float)b/a;
printf("%.3f\n",c);
}
この(float)の部分はキャストと呼ばれる書き方だ。 キャストの後ろに書いてある値を、強制的にキャストで指定した型に変換するものだ。 この変換は一時的であり、本体のaやbの型は変わらない。
キャストは実際に仕事でプログラムを書くときはよく使うし、結構注意しないといけないことも多いので覚えておこう。