3 これまで学習したデータ構造

3.1 単純型変数

単純型の変数は、次のように変数に一つの数値2しか代入で きないものを言う。
	char c, h, moji;
	int i, j, seisu;
	double x, y, jisu;
通常、これを変数と言う。変数というと、この単純型を示す場合が多いが、配列や構造体 を含める場合もあるから、文脈から適当に判断しなくてはならない。

これのイメージは、図3に示しているとおりで、変数とは数値を 入れる箱のようなものである。整数型と倍精度実数型の変数は、数学の変数と全く同じで ある。

図 1: 変数のイメージ。変数とはデータを入れる箱のようなもの。
\includegraphics[keepaspectratio, scale=0.8]{figure/image_variable.eps}

図を見て分かるように、箱の大きさが型によって異なる。これは、一つのデータを表現す るために必要な情報量が異なるためである。情報量の単位は、ビット(bit)が使われる。2 進数の1桁を1ビットと言う。8ビットで1バイトとなり、それがコンピューターで使われる 基本単位となる。

同じint型でもいろいろあり、表現できる範囲が異なっている。これは一つの変数の 情報量の差から生まれる。C言語で使われる型によって表現できる範囲を 2に示す。全てのC言語は同じとなっておらず、諸君が使っ ているシステムではこの表のようになっている。いろいろな型があるが、ほとんどの場合、 charintdoubleで十分である。諸君が作るプログラムでは、これらで 十分、間に合うが、問題が生じたときのみ他の型を使えば良い。

表 2: 型によるデータの表現の違い
バイト長 範囲 有効精度
char 1 -128〜127
signed char 1 -128〜127
unsigned char 1 0〜255
short int 2 -32768 〜 32767
signed short int 2 -32768 〜 32767
unsigned short int 2 0 〜 65535
int 4 -2147483648 〜 2147483647
signed int 4 -2147483648 〜 2147483647
unsigned int 4 0 〜 4294967295
long int 4 -2147483648 〜 2147483647
unsigned long int 4 -2147483648 〜 2147483647
signed long int 4 0 〜 4294967295
float 4 およそ $ 10^{-38}$$ 10^{38}$ およそ 6桁
double 8 およそ $ 10^{-308}$$ 10^{308}$ およそ 15桁
long double 12 およそ $ 10^{-4932}$$ 10^{4932}$ およそ 18桁

3.2 配列

一次元の配列は数学のベクトルと、二次元の配列は行列とよく似ている。実際、C言語で ベクトルや行列の演算を行うときには、構造が同じ配列を使うことになる。順序 づけられた同じ型のデータが複数ある場合、配列の出番となる。添え字(これが順序を表 す)により、それらにアクセスできるので、データの操作が簡単にできる。

配列を使う場合、

	int i[10], j[100][100];
のように宣言を行う。そうすると図[*]のように、メモリー領域が確保され、 配列が使えるようになる。この配列のデータにアクセスするためには、配列名と添え字を 指定する。次のようにである。
	i[3]=5;
	c=i[3];
図 2: 配列のイメージ。データを入れる箱がいっぱいある。ただし箱の大きさは全 て同じ。
\includegraphics[keepaspectratio, scale=0.8]{figure/image_array.eps}

3.3 構造体

配列は同じ型のデータの集まりであったが、構造体は異なる型のデータの集まりである 3。この構造体を使う場合、
  1. 構造体のメンバーを規定する。これにより構造体を定義する。
  2. 構造体変数の宣言。これによりメモリーが確保される。
という手順が必要である。このようにして、構造体を定義し、メモリーを確保した後、そ れを使うことができる。今までは、データの型の内容があらかじめ決まっていたので、最 初の手順は不要であった。一方構造体のメンバー、すなわちデータの型はプログラマーが 決めなくてはならないので、最初の手順が必要となる。

最初のメンバーの規定は、つぎのように行う。

	struct kouzoutai{
	  char name[8];
	  int seisu;
	  double jisu;
	};
これでは、メモリーがまだ確保されていないことに注意が必要である。これは、プログラ マーが新たに変数を定義したのと同じである。

そして、この構造体を実際に使う場合には、次のようにしてメモリーを確保する。

	struct kouzoutai a, b[10];
そうすると構造体変数が使用可能となる。この様子を、図[*]

メモリーに確保された構造体のデータにアクセスするためには、ドット(.)演算子を 使うことになる。次のようにである。

	a.seisu = 5;
	b[5].name[3]='a';
	x = b[6].jisu;
図 3: 構造体のイメージ。データを入れるいろいろな大きさの箱がある。
\includegraphics[keepaspectratio, scale=0.8]{figure/image_structure.eps}

ホームページ: Yamamoto's laboratory
著者: 山本昌志
yamamoto masashi
平成17年5月14日


no counter