C言語で扱われるデータは大きく「定数」と「変数」に分けられます。
定数: 値を変えないもの
変数: 任意の値をとりうるもの
ということができます。
たとえば、a = 10; a = 20; では、
a は「変数」、10 や 20 は「定数」になります。
※ 「a = 10;」 は、a に 10 を代入するという意味になります。 詳しくは「3-1. 代入演算子(=)」を参照してください。
定数は具体的に下記のように分類できます。
数値定数 | 整数定数 | 8進数 | 先頭に「0」をつけて表記(077など) |
---|---|---|---|
10進数 | 通常の10進数と同じ表記 | ||
16進数 | 先頭に「0x」をつけて表記(0x41など) | ||
浮動小数点定数 | 小数点以下が扱える数(16.25 や 1.0e-3 など) | ||
文字定数 | 1文字のこと。'A' や 'B' のように ' ' で囲んで表記 | ||
文字列定数 | 複数文字のこと。"ABC" や "computer"のように " "で囲んで表記 |
※ 「浮動小数点数」とは浮動小数点表現方式の実数で、C言語では小数点以下の数を扱うときに用います。 ※ 1.0e-3 は 1.0×10-3(0.001)のことです。C言語では浮動小数点数をこのようにも表記します。
変数とはコンピュータのメモリ上に実際に用意された作業エリアです。
int data;
と記述すると、メモリ上に「data」という名前の整数を扱う 2バイトの作業エリアが用意されますし、
float data2;
と記述すると、メモリ上に「data2」という名前の浮動小数点数を扱う 4バイトの作業エリアが用意されます。
C言語ではこの変数に、定数を代入したり、演算を行ったりしながら処理を進めていきます。 変数が、どのようにメモリ上で扱われるかは、こちらを参照してください。
プログラムを作成するとき、必要になる変数はすべてどういう作業エリアにするか、最初に宣言しなければなりません。
以下に変数の主な型をまとめます。データ型の修飾については、第14章を参照してください。
型指定 | データ型 | バイト幅 | 扱える数値の範囲 |
---|---|---|---|
char | 文字型 | 1 | -128〜127 |
int | 整数型 | 2 | -32768〜32767 |
long | 倍長整数型 | 4 | -2147483648〜2147483647 |
float | 単精度浮動小数点型 | 4 | 3.4E-38〜3.4E+38 |
double | 倍精度浮動小数点型 | 8 | 1.7E-308〜1.7E+308 |
※ バイト幅と扱える数値の範囲については各処理系によって異なります。
※ このホームページでは、MS-DOS系のC言語で用いられているバイト幅を採用しています。 その他の処理系のC言語を利用している人は、自分の環境に合わせて読みかえるようにしてください。 また、データサイズがわからない場合には「sizeof演算子」を使うなどして確認するようにしてください。
変数名を付けるには以下のようなルールがあります。 これは、関数や記号定数でも同様となります。
※ ルールではありませんが、変数名はその変数を端的に表す名前を付けましょう。 平均値を格納する変数名を単に「a」とするのと、「average」とするのとでは、プログラムの読みやすさが全然違います。 ※ 下線(_)で始まる変数名は、C言語の処理系が予約識別子(処理系で使用する識別子)として用いている可能性があります。 下線で始まる変数名はつけないようにしましょう。
宣言時に値を代入することを初期化と呼びます。
変数は宣言時に必要な値で初期化するか、宣言後に必要な値を代入しなければなりません。
宣言しただけでは、不定値(ゴミ)が入っているので、仮に初期値を 0 にしたい場合でも、きちんと「int a = 0;」のように初期化してください。
「配列」とは同種のデータ型を集めたものです。
配列を用いると、関連のある複数のデータをまとめて扱うことができます。 尚、この章では「1次元配列」の説明だけ行うことにします。 「2次元配列」については第9章をご参照ください。
変数と同様、プログラムの先頭で型と配列名、要素数の宣言を行います。
{ } を使って初期化リストを書きます。
※ 要素数が省略できるのは、初期化データを宣言しているときのみです。 単に int no[]; とすると、コンパイラは配列の要素数がわからず、エラーを出します。 ※ 初期化子が要素数で指定した要素数より大きい場合はコンパイルエラーとなります。 int no[5] = { 1, 2, 3, 4, 5, 6 }; ==> コンパイルエラー ※ 配列の初期化では、初期化の足りない要素は 0 で初期化されます。 int no[5] = {0}; とすると、配列no の 5個の要素全てに 0 を設定することが出来ます。 また、 int no[5] = {1}; とすると、{ 1, 0, 0, 0, 0 } で初期化されます。 ※ この初期化は宣言時のみ可能です。 宣言後に初期化を行おうとすると、コンパイルエラーとなります。 int no[5]; no[] = { 1, 2, 3, 4, 5 }; ==> コンパイルエラー
配列の後ろに[ ]で囲んで記述する数字を「添字」といい、配列を 0 から順番に数えます。
配列は添字を直接指定してデータをアクセスします。
人間は「A」という文字データを表すのに 'A' と記述する
コンピュータは 'A' という記述を 65 というコードで扱う
つまり、'A' と 65 は等しいのです。 この 'A' に対応する 65 というコードを「ASCIIコード」と言い、ASCIIコードを表にしたものを「ASCIIコード表」と言います。
文字コードにはたくさんの種類が存在しますが、コンピュータ用の英数字のコードとして最も広く用いられているのはASCIIコードです。このホームページでも、文字コードはASCIIコードを基に記述してあります。
char型を何故「文字型」と呼ぶのでしょう。
char型は 整数を扱う型ですが、整数を扱うにもかかわらず、「文字型」と呼ばれています。
これは、アルファベットや数字、記号などの半角文字が1バイトで表現可能なためです。(漢字など全角の文字は2バイトで扱い、この限りではありません。)
C言語では、文字データと文字列データとは以下のように区別されます。
(文字)メモリ上の1バイトに格納される。 ' '(一重引用符)で囲む。 char moji = 'A'; (文字列)メモリ上の複数バイトに格納され、終了コードとして、0 が最後につく。 配列で表す。 " "(二重引用符)で囲む。 char moji[4] = "ABC"; |
文字列は、文字型配列で宣言して扱います。
char str[10]; |
※ 1, 2 とも要素数は省略可 ただし、要素数が省略できるのは、初期化データを宣言しているときのみです。 単に char str[]; とすると、コンパイラは配列の大きさがわからず、エラーを出します。 ※ 文字列データの初期化は上記 1、2 のどちらを用いてもかまいませんが、 2 を用いた方が簡単です。 |
文字列の初期化で、
char str[] = 'A'; …(1) char str = "A"; …(2)
コンパイル時に(1)はエラーとなり、(2)はエラーもしくは警告を出力します。
char str[] = "A";
は文法上正しく、正常に動作します。
このとき(イ)は下記のようにメモリ上に2バイト分のエリアが確保され、文字列として扱われます。
char str[] = "";
のようにすると、下記のように中身が '\0' のみの文字列を宣言することができます。
これは、文字列の連結などのときに用いると便利です。(ただし、文字列連結時には、配列は十分な大きさを確保してください。)
文字列データは必ず終了コードとして 値 0を付けます。文字列を格納する配列の大きさは宣言時に決まりますが、文字列はこの配列いっぱいに格納する必要はありません。値 0 を使って終端を示せばよいのです。この値 0 は文字列専用の初期化を使って、
のようにすれば、コンパイラが付加してくれます。
(ただし、一般の配列と同じように初期化すると付加されませんので、プログラム上で設定する必要があります。)
この値 0 の文字をエスケープシーケンスを用いて '\0' のように表記します。また、この値 0 の文字をよぶときには「NUL」とよびます。「NUL」は空ポインタ定数の NULL(ヌルと読むのが一般的です)と区別するために「ナル」と読まれるのが一般的なようです。
なお、上記補足の(ウ)の '\0' だけの文字列は「空文字列」や「NUL文字列」と呼ぶようです。
※ このNULとNULLとの区別や読み方はいろいろと見解があるようですが、 いづれにしても文字列の終端には値 0 の文字を付けることをしっかりと覚えて置いてください。 (2000.12.16追加)
ANSI規格の C では、次のものを予約語としています。
予約語は識別子(変数名や関数名など)には使えません。
auto | double | int | struct |
break | else | long | switch |
case | enum | register | typedef |
char | extern | return | union |
const | float | short | unsigned |
continue | for | signed | void |
default | goto | sizeof | volatile |
do | if | static | while |
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved