C言語入門ブログ

C言語を、本当に初歩から学んで、その内容を書いていきます。

変数の上書きと、宣言と代入を同時に行う方法について

さて、今回は変数の上書きの話をします。
また、宣言と代入を同時にやる方法も説明します。
前回よりは短い記事になると思います。

前回、変数に値を代入する話をしました。
参考までに前回の記事を貼っておきます。

変数について - C言語の勉強用ブログ

今回はまず、その代入を何回も出来るのか、という話をしようと思います。

変数の上書きについて(及び、代入関係の特殊な記法について)

変数の上書きについて

まず結果から言うと、何回でも出来ます。
ただ、最新の結果しか覚えられません。
次のようなコードを試してみましょう。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	a = 4;   //aに4を代入
	a = 6;   //aに6を代入
    printf("%d",a);
	return 0;
}

aに値を2回代入していますね。
これの結果として、6が出力されます。
このように、複数回代入した場合、最後の値が変数に保存されます。
以前に代入した値を復活させることはできません。そこには注意が必要です。

また、変数に代入する式(つまり、『=』の右側)に、変数を使うことが出来ます。
次のコードを見て下さい。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	int b;   //変数bを作ることを宣言
	a = 4;   //aに4を代入
	b = a + 6;   //bにa+6を代入
    printf("%d",b);
	return 0;
}

これは、a + 6のaが4であることから、bに4+6で10が入ります。
気になる方は実行してみて下さい。

また、変数の性質上、ちょっと変にも思える、次のような書き方も出来ます。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	a = 4;   //aに4を代入
	a = a + 3;   //aにa+3を代入
    printf("%d",a);
	return 0;
}

aにa+3を入れる、という式ですね。
この場合、プログラムは、
・まず、右の式の値を計算して、
・その後で、左の名前の変数に、右の式の値を代入する
という手順で動きます。
よって、右の式を計算して、a+3は7、となり、その後にaに7を入れる、ということが実行されます。
プログラミング特有の表現ですが、そのうち慣れると思います。

特殊な略記法について

また、覚えておくべき特殊な書き方をここで紹介します。もちろん使わなくてもプログラムを書くことは可能ですが、慣れるとこちらの方が速く書けますし、そして簡潔ゆえ分かりやすいコードになります。
まずは、

a += 2;

という書き方です。
これは、

a = a + 2;

という意味になります。
もちろん、2のところを変えて、

a += 9;

と書けば、

a = a + 9;

と同じになります。

実際に、次のコードを実行して、動作を確かめて下さい。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	a = 4;   //aに4を代入
	a += 3;   //aにa+3を代入
    printf("%d",a);
	return 0;
}

また、上と同じ分類の表現として

a -= 2;
a *= 2;
a /=2;

というのがあります。
これはそれぞれ、

a = a - 2;
a = a * 2;
a = a / 2;

を表します。
この3つは『+=』ほどは使われないような気がしますが、覚えておいて損はないと思います。

そして最後に、単項演算子と呼ばれる、もっと特殊(?)なものを紹介します。

a++;
a--;

というものです。
これらは、初めて見ると想像も付かないかもしれませんが、それぞれ

a = a + 1;
a = a - 1;

を表します。また、先ほど紹介したものを使うと、これとも一緒ですね。

a += 1;
a -= 1;

次のコードを実行して、確かめてみて下さい。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	int b;   //変数bを作ることを宣言
	a = 8;   //aに8を代入
	b = 6;   //bに6を代入
	a++;     //aを1増やす
	b--;     //bを1減らす
    printf("a is %d, b is %d",a,b);  //aとbを表示
	return 0;
}


『++』や『--』は1増やしたり減らしたりするだけだから、不便なのでは?と思うかも知れませんが、実はこれはかなり使います(後に出てくる、繰り返し文というものの中で重宝します)。是非ともマスターしたいところです。

☆練習問題1.変数aとbを宣言し、aに3、bに5を代入したあと、aを8増やし、bを2倍にするプログラムを、ここで紹介した略記法を使って書いて下さい。また、ideoneで実行して合っているか確かめて下さい。

宣言と代入を同時に行う方法

さて、今回はもう一つ説明します。それは、宣言と代入を同時にやる方法です。

これまでは、変数aを宣言し、aに4を代入するときは、

int a;  //aを宣言
a = 4;   //aに4を代入

と書いていましたが、これは略して一気に書くことができます。
どうするのかと言うと結構シンプルで、

int a = 4;   //aを宣言して4を代入

と書けばOKです。本当に、元のやつを1行にまとめて書いただけ、という感じで、分かりやすいと思います。
もちろんこれまでと同じように、右側に式を使うことも出来ます。例えば、

int a = 3 + 2;

int a;
a = 3 + 2;

と同じになります。

この宣言と代入を同時にやる書き方で書いたほうが、プログラムは短くなります。
ただ、無理にこれで書かず、別々で書いても構いません。まずは自分のやりやすいようにやるのが一番ですから。
また、プログラムの最初の方で一旦宣言し、後で代入したい、なんてこともあるので、普通は分けて書く方法もやっぱり使います。
とにかく今は、この同時にやるやり方が、別々にやるやり方と同じ意味になっていることが分かっていればそれでよいと思います。

☆練習問題2.上の練習問題1.のコードの、宣言と代入の部分を、ここで紹介した同時に行う方法に変更して下さい。また、ideoneで実行して、結果が同じになることを確かめて下さい。



はい、今回はここまでです。
次は、入力についての話をします。

練習問題の解答例

練習問題1.

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	int b;   //変数bを作ることを宣言
	a = 3;   //aに3を代入
	b = 5;   //bに5を代入
	a += 8;     //aに8を足す(a = a + 8)
	b *= 2;     //bを2倍する(b = b * 2)
    printf("a is %d, b is %d",a,b);  //出力して確かめ
	return 0;
}

練習問題2.

#include<stdio.h>
int main()
{
	int a = 3;   //変数aを作り、3を代入
	int b = 5;   //変数bを作り、5を代入
	a += 8;     //aに8を足す(a = a + 8)
	b *= 2;     //bを2倍する(b = b * 2)
    printf("a is %d, b is %d",a,b);  //出力して確かめ
	return 0;
}