第十一話 型について
「ま、Cのプログラミングの作り方については、もうイツキくんにも解ったと思うから、これからCの基礎的な構成要素について、もっと詳しく話すわ」
立花先輩はそう言うと、PCへと向き直ってキーボードへと手を載せる。
「基礎的な構成要素?」
「うん。これからの高度なプログラミングの説明に必要だもの。そろそろ基礎的な部分もイツキくんにも知っておいてほしいの。今回話すのは、Cで使うタイプ、型のことよ」
「それって、intとかの事ですか?」と西原さん。
「うん。Cには他にもいろいろあるから、まずそこから知っておいて欲しいの。まずは、int。整数ね。1とか0とか-10とか。float、浮動小数点の実数。1.5とかの小数点のある数ね。doubleは、floatと同じだけど、より精度が高くなっているの。で、さっきも出たchar。文字に対して使うっと」
先輩はウィンドウズのメモ帳を開くとカタカタと書きこむ。
「よく使うのはこの四つかなー。他に大きな数を使いたい時にlongを使うけど、これはintと同じようなものだと思っていいわ」
「先輩、float、doubleの浮動小数点って?」
「あ、これは気にしないで。コンピューター内部で小数点を表すのに使う計算方法のことだから。たぶん、イツキくんにはわからないと思う。ただの実数、小数点のある数だと思って」
うっ。はっきり言われると、少し悔しい。
「あとね、unsignedって頭につけたら、0以上の数のみになるの。unsigned intだと、0以上の整数、unsigned floatだと0以上の実数ね」
「なんでマイナスの数を出せなくするんだろう?」
「これは使える数の問題ね。これだとマイナス分のメモリーが要らないから、上限が普通の二倍の数を表せるの。もし、0以下の数にならないと確定している変数だったら、unsigned intにした方が得でしょ? 他にも、いろいろと理由はあるけど、ま、一番の理由はこれね」
「ふむふむ。なるほど」
「で、charの話だけど、これはちょっと特殊ね。文字に使うんだけど。コンピューターが使う文字は、アスキーコードって言って、それぞれ番号が振られているのよ。たとえばアルファベットの大文字のAだと、65とか。Bは66。数字の1だと、49とかね」
「それがcharと?」
「charの変数には、その数を入れて、文字として表すわけ。たとえば、char a = 'A'; って書くの。単独の文字はシングルクォート『’』で囲むのよ。これは、char a = 65と実際同じ意味だけど、人間の目にはこっちの方が解りやすくなるでしょ?」
「よく考えられているんだな」
「じゃあ今度は、配列についても少し話したいわ」
先輩は、カタカタとコードを書き始めた。
int a[100];
a[0] = 1;
a[1] = 2;
a[99] = 100;
「これは、intの配列変数。この場合、100個の数をaって名づけた変数に入れられるのよ。四角カッコの中のインデックスの数によって、その中のどれを現すのか決められるのね」
「0から始まるんですね」と西原さん。
「そう。コンピューターの決まりのようなものだと思って。0番から100を数えたら、上限は99。だから、a[99]までなの。a[100] = 101;なんて書いたらエラーが出るわよ」
「しかし配列って何に使うのだろう?」
「同じ種類のデータだと、まとまってて便利に使えるの。たとえば、敵キャラのAIの集団を幾つも動かしたりする時にね。そのうち、イツキくんにfor文とか教えるから、使い道がもっと出るわよ」
先輩は、メモ帳のコードを消すと、新たに書き始めた。
int a[3] = { 1, 2, 3};
「あとね、変数の宣言の時には、同時にこういう風に中カッコ{}内で値を入れることで初期化も出来るから、これも覚えておいて。ちなみに、a[0] = 1とかの、一つずつ入れてる例は、変数の初期化じゃなくて、初期化終了後の代入だからね。この違いも重要なの」
「初期化と代入か」
ぶっちゃけ俺はまだよくわからん……。
「で、今度のが実は本題。文字列についてよ。今までのは、前振りみたいなものよ」
「文字列、文字の配列、ということですか?」と西原さん。
「そ。char変数だと、1文字しか入れられなかったでしょ? それじゃ、あまり使い道ないじゃない。でも、配列にしたら、幾つも文字を入れられるの」
先輩はコードを書いた。
char string[4];
string[0] = 'A';
string[1] = 'B';
string[2] = 'C';
string[3] = '\0';
「これだと、ABCの三文字がstring配列変数の中にあるわね」
「最後のやつって? インデックス3のやつ。0円?」
「わかってるって、イツキくんの疑問」先輩はふふっと笑った。「これはナル終端文字っていって、文字列の最後に必ずつけないといけない記号なのよ。じゃないと、コンピューターはどこまでが文字列の最後なのか、わからないのね」
「ふむふむ」
「あとね、こういう一文字ずつ入れる書き方は面倒臭いーってんで世界中のプログラマーがぶーぶー言った結果、変数の初期化の時に限って、こういう書き方も許されるようになったの」
char string[] =“ABC“;
「こっちの方がよく使われるから、覚えておいて」
「四角カッコの中の数字は書かれないんですね」と西原さんが尋ねる。
「うん。こうしたら、コンピューターは自動的に、ABCの文字3つ + 終端文字の4つ分の配列を作って設定してくれるの。実際、入れてもいいんだけど、普通は省略するわね」
「こっちの方が読みやすいな」
「ただし、途中で文字を変えたくなったら、最初のやり方で入れないとダメだよ? たとえば後で2番目のBをDにしたくなったら、string[1] = ’D’; って入れたら、stringはADCになるわけ。でも、またstring[] = “ADC“;って入れたらエラーになるからね」
「ところで先輩、日本語はどうしたら入れられるんですか?」
先輩は少し考え込んだ。
「それはちょっと難しい話になるよ? 日本語、というか日本語文字も含めたいろんな非英語文字や記号には、2バイト文字、あるいはマルチバイト文字ってのが使われてるんだけど、これはちょっと複雑なのよ。英文字や数字だと1バイトずつ、つまりchar1個分ずつ入れるんだけど、日本語の場合は漢字、ひらがな、カタカナと数が多いから、2つずつ要るの。ま、さっきの簡易な初期化方法だと、日本語でもコンピューターがちゃんと2バイト分ずつ計算して入れてくれるから、今は気にしないでもいいわよ」
「うーむ。結構、面倒なんだなぁ、コンピューターって」
「ふふっ。慣れたら簡単だよー」
そう先輩は言うと、メモ帳を閉じた。
「じゃ、イツキくんも文法の話に疲れたみたいだし、気分転換するわよ。次に作るゲームを考えようよ」
「次に作る……ゲーム」
俺は息を飲んだ。
そうなのだ。俺は忘れていた。今、C言語を習っているのは、あくまでゲームを作るための道具だってことを。
俺は、何を作りたいのだ?




