Shunk

Shunk/C言語から学ぶ「変数」

Created Sat, 29 Jun 2024 11:10:22 +0900
1225 Words 6 min

初めに

この記事の対象者はプログラミング初心者。 授業の復習がてら自分の言葉でまとめています。

変数とは

よく変数とは値を入れておく箱だと言われる。 どういうことだろうか?

変数は中にデータを入れて、扱いやすくするための魔法の箱である。 一度用意した箱は簡単に増やせるし、何度も利用することができる、その中に値を入れ直すこともできる。 非常に便利。

具体的なイメージを掴むために、コードを見てみよう。

#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;

解説を付け足してみた。 ここで出てくるデータのタイプのことを、プログラミング言語の文脈的には「型」と呼ぶ。

日本語でこの流れを説明すると、

  1. 数字型を入れることができる箱「a」「b」「sum」を用意する
  2. aとbに10と20を入れる
  3. sumにaとbに入っている値の合計を入れる

変数の約束事

先ほどの説明でなんとなく変数の使い方がわかったと思う。

しかし先ほどの例はうまく動く例をわざと出しただけで、実際にはうまく動かないことも多い。

変数を使うときには守らなければいけないルールがある。

  1. 最初に決めた型(intとか)を変えることはできない(下のコラムのような例外はある)
  2. 変数に対して行えるのは「値をみる」「値を入れる」の二つだけ
  3. 「値を入れる」と元々の値は上書きされる
  4. 「値をみる」だけでは値は変わらない
  5. 型と違うタイプのデータは入れることはできない

#### コラム 変数の「型」について面白い実験をしてみよう

以下のような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の型は変わらない。

キャストは実際に仕事でプログラムを書くときはよく使うし、結構注意しないといけないことも多いので覚えておこう。