これからC言語のプログラミングを始めていきますが、その前に、「型」という概念を勉強しましょう。これはC言語にかぎらず、今主流のjavaやC++などでも重要なポイントになります。
「型」とは
プログラムで扱うモノの分類、種類のことです。難しいことは考えずに、人間の世界において見ていくと、
例えば、10
は数字です。24.453
も数字ですし、42567
も数字です。また、Hello, C World!
やAbcde
とかは文字列です。
このように、それぞれがどういった種類に分けられるか、決まった「型」を持っています。イマイチぴんと来ない場合は、「型」を「分類」などに置き換えると、ニュアンスは大体同じになると思います。
プログラミングとしての「型」
さて、ではこれをプログラミングの世界では、どう分類していくのでしょう。
大きく分けて3つに分けることができます。数値、文字、その他です。今回は特に重要になる数値と文字について見ていきましょう。
int型 : 数値で整数
int型(イントがた)とは、数値で、かつ整数であるものの分類です。例えば、「0」や「-3」、「3134」など。日本語では「整数型」などと言われたりします。
大抵の整数はこのint型で大丈夫です。同じく「数値で整数」の分類はほかにもありますが、扱える整数の大きさが異なるだけです。
double型 : 数値で小数型
double型(ダブルがた)とは、数値で、実数であるものの分類です。実数とは整数と小数を含むもので、「3.000」、「1.243」、「345.352」、「-21.334」など、小数点のつく数字のことです。日本語では「小数型」、正確には「浮動小数点数型」と呼ばれます。
char型 : 文字(1つの文字)
ここで(このサイトにおいて)言う「文字」とは、「一文字の」という意味を暗黙のうちに含みます。例えば、'c'、'A'、'p'、'6'などの半角文字です。C言語で文字を表すには、シングルクォーテーション(')で囲む必要があります。ダブルクォーテーションではありません。
char型(キャーがた、キャラがた、チャーがた、など)は、そういった「文字」の分類です。
文字列
文字列とは、任意の「文字」が0個以上連なるものを指します。たとえば""
(空文字)や、"hogehoge"
、"Hello, C World."
などです。
しかし、C言語において、文字列を表す明確な型は存在しません。C言語では、上記のように、「文字」が連なったものとして扱われます。
「数字」と「文字としての数字」は全くの別物
ここで、鋭い人は気がついたかもしれません。「0」や「5」などの一桁の数字は、「数字」なのか「文字」なのか、どっちなの?
答えは、どちらも存在しますが、全くの別物です。
int型としての数字は、数字どうし、足し算、引き算などの計算ができます。
char型としての数字は、足し算や引き算の計算は可能ですが、数学的に期待する正しい答えは出ません。
実験してみましょう
#include <stdio.h>
int main(void) {
printf("1+2=%d\n", 1+2);
printf("1+2=%d\n", '1'+'2');
printf("1+2=%d\n", '1'+2);
}
コードの内容は、いずれも字面的に1+2を計算させたもので、期待する答えは「3」です。上側から順に、「数値としての1+2
の計算」、「文字どうしの'1'+'2'
の計算」、「文字と数値の'1'+2
の計算」の結果を表示させるプログラムです。
実行すると、一番上のみ「3」が返され、あとの2つはとても大きな数字になっています。
いずれの結果もプログラミング的には正しいのですが、とにかく、数値としての数字と、文字としての数字は全く別物であると分かっていただけたらと思います。。
数字は計算に使うもの
そういった性質の違いを見てみると、計算は「int型」として数字を扱わなければなりません。
前回、printf文を使って、数字を出す方法を2種類学んだのはこのためです。ダブルクォーテーション(")の中に数字を入れてしまうやり方が、「char型」としての数字の扱い方で、%d
を使って置き換えるやり方が、「int型」としての数字を扱う方法となります。
まとめ
今回は「型」について勉強しました。型とは、プログラムで扱うモノの「分類」を意味します。
- int型 : 整数
- double型 : 小数含めた数値(実数)
- char型 : 文字
次回、変数について
では次からは、実際に数字どうしを計算させて、その結果を表示させるような、よりプログラムらしいプログラムを書いていきたいと思います。まずはその第一歩、変数についてみていきましょう。