変数・int・double

前回は文字列の表示についてやりましたね。
今回はprintfについてもう少し掘り下げるのですが、先に変数について考えてみましょう。

変数って何?

まず、変数とは、数字や文字を入れておくためのものです。
そして、この箱には形があります。とりあえず、下の表を見てください。

表記 意味
int 整数
long 整数(あまり使わない)
short 整数(あまり使わない)
char 文字(半角)・整数
float 実数
double 実数


ここでいろいろと不思議に感じると思います。
なぜ、整数のタイプが3つあったりするのでしょうか。

実はこれは数の上限が関係しています。
変数には扱える数値の限界があります。
たとえば、char型で作った変数は-128〜127までしか扱えません。
また、int型はコンパイラによって扱える数の上限が変わります。(*1)

では変数の作り方を見てみましょう。

型名 変数名;


型名のところには上の表の int や float 見たいなものを書けば大丈夫です。
その後、半角スペースを挟んだ後、変数の名前をつけます。これは好きな名前がつけられますが…
変数につけられる名前はある程度決められています。

1.全角文字は使えない
2.A〜Z, a〜zは使える
3.0〜9は使えるが先頭には持ってこれない
3.アンダースコア(_)も使える
4.int とか double は最初の作るときのみ書く。使うときは書かない。

くらいでしょうか。
では具体例を見てみましょう。
#include <stdio.h>

int main(){
	int a;
	int b;
	double c;
	
	return 0;
}


コンパイルし、実行してみます。
おそらく何も起こらないと思います。
これだけでは内部で、a, b, cを作ってそのまま終了する、というプログラムになってしまいます。
そうなると、変数がどうなってるのかまったくわかりませんね。
では、変数の中身を表示してみましょう。ここでprintfの新しい機能が出てきます。

printfの"f"

さて、変数の中身をprintfで表示してみましょう。

#include <stdio.h>

int main(){
	int a;
	printf("aの値は%dです。", a);
	
	return 0;
}


""の中に何か変なものがありますね。さらに引数(括弧の中に書くもの)も2つあります。
実はprintfは少し特殊な関数なんです。
文字の中に、%dを書くと、int型の変数を埋め込むことができます。
そして、埋め込む変数を、2番目の引数に書きます。
※関数は引数の順番が重要です。逆に書くことはできません。

コンパイルして実行してみると…

printfの書式

何だこれ!?ってなると思います。
※表示される数字はこれとまったく同じになるとは限りません。

まず、このように表示されたのは理由があります。
変数aは作っただけで、中身はまだ何もいじっていません。
このとき、aの中身は何が入っているかわからないのです。
というのも、変数はPCが、メモリの使っていない領域を勝手に探して、あいているところに作ります。
そのため、前に使っていたデータが残ったままなので大体は変な数字が入っています。

よく見ると、コンパイル時に警告(warning C4700)が出ていて、初期化していない変数が使用されていることを示していますね。

変数を使ってみる

変数は作っただけでは意味がありません。
変数を使ってみましょう。まず、作ったら、変な数字が入っているので、初期化しなくてはなりません。
初期化するときは以下のように書きます。

#include <stdio.h>

int main(){
	int a = 0;	//0で初期化
	printf("aの値は%dです。", a);
	
	return 0;
}


これで無事aが0で初期化されました。見てのとおり、 = で代入することができます。
変数を作るときに = で代入すると初期化といわれているだけで、どこでも代入はできます。
もう少し見ていきましょう。

#include <stdio.h>

int main(){
	int a, b = 0;	//bを0で初期化,aは作っただけなので何が入っているかわかりません。
	
	a = b;	//aにbを代入(今回の場合は0が代入される)
	a = 6;	//aに6を代入(入っていた0に上書きされます)
	printf(" aの値は%dです。\n bの値は%dです。", a, b);
	
	return 0;
}


このソースで見てほしいところは3箇所です。
まず、変数を作るときに、同じ型が複数の場合、カンマ(,)で区切って続けて書くことができます。
次に、変数に変数を代入できます。(上の例だと、6行目ではbは0なので、aは0になります)
最後に、printfの引数です。%dが2つになると、追加の引数も2つになります。このとき、表示される順は左からになります。

printfで%を使ったいろいろ

ここまで、%dを使ってint型の変数の中身をprintfを使って表示してきました。
しかし、実数を表示したくなることもあるかもしれません。
そうなると、表示する変数の型がintではなくfloatやdoubleになり、%dを使っても正しく表示されません。
そんなときは%f(この後出てくる関数を考慮してdoubleのときは%lfと覚えたほうが良いです)を使います。(*2)
では、次の例を実行してみましょう。

#include <stdio.h>

int main(){
	double a = 0.5;
	
	printf("1つ目の値は%dです。\n2つ目の値は%lfです。", 2, a);
	
	return 0;
}


まず、確認してほしいのは、double型を受け取る2つ目は%dではなく、%lfを使っている点です。
次に、1つ目のところに直接数字を書いているところです。
実は、引数の中には計算式などを入れても問題ないです。
なお、計算式は次のページで説明します。

*1:最近のコンパイラ、OSでは4バイト分(-2147483648〜2147483647)が多い気がします。
詳しい型の説明はこちら

*2:本来、printf系列はdouble型は%fが正しいのですが、scanfでfloatとdoubleを分けるように使われていたことが
  原因で、混合した情報が広がったみたいです。結果的に現在のC/C++言語ではどちらを使っても大丈夫になったので
  特に気にする必要はないと思います。
前のページ   
inserted by FC2 system