Linux講座にようこそ。このページは「C言語プログラミング入門 - 第12章.その他の型」です。
C言語の型名の一部については「【表2-1】 型名一覧(代表的なもの)」で紹介しましたが、それらも含めて、一覧表で示します。
区分 | 型名、その他 |
---|---|
符号付整数型 | char、signed char short、short int、signed short、signed short int int、signed int、signed long、long int、signed long int、signed long long long、long long int、signed long long int、signed long long (領域長(バイト)はshort≦int≦long≦long longの関係です) |
符号なし整数型 | unsigned char unsigned short、unsigned short int unsigned int、unsigned unsigned long、unsigned long int unsigned long long、unsigned long long int |
浮動小数点数型 | float、double、long double (領域長(バイト)はdouble≦long doubleの関係です) |
配列型 | void型以外は配列型として宣言して使うことができます。配列の取扱いについては「7.たくさんのデータを処理するための配列」を参照してください。 |
ポインタ型 | すべての型はポインタ型として宣言して使うことができます。ポインタの取扱いについては「8.データをアドレスで操作するためのポインタ」を参照してください。 |
関数型 | ある型名の値を返す関数は関数型です。関数の取扱いについては「9.プログラムの部品化のための関数」を参照してください。 |
構造体型 | 異なる型名のデータをまとめて取り扱いたい場合は構造体型として宣言して使うことができます。構造体の取扱いについては「11.異なる型名データをまとめて取り扱う構造体」を参照してください。 |
void型 | 型を持たないという特殊な型名です。返り値を持たない関数の型名などに使用します。 |
共用体型 | メモリ領域を複数の型名データで供用するためのものです。以降で説明します。 |
列挙型 | 列挙定数と呼ぶ識別子によって定義された整数値の集合を使用するためのものです。以降で説明します。 |
ここでは共用体型、列挙型および、ユーザ固有の型を定義するためのtypedefについて説明します。
構造体の場合の各メンバ一はメモリ上に順番に配置されます。例えば、図12-1の構造体ではint型のデータ(4バイト長)、double型のデータ(8バイト長)、char型のデータ(1バイト長)ですので、この構造体は13バイトの領域となります。(コンピュータの種類やOSにより異なります。これはあくまでも一例です)また、この構造体には3種類のデータを格納することができます。
一方、共用体の場合の各メンバ一はメモリ上の同じ領域に配置されます。例えば、図12-1の共用体ではint型のデータ(4バイト長)、double型のデータ(8バイト長)、char型のデータ(1バイト長)が同じ領域に配置されます。この共用体の大きさはメンバ一の中で一番大きなdouble型のデータの大きさの8バイトになります。
なお、共用体は同じ領域を共有することから、1種類のデータしか格納できませんので注意してください。例えば、図12-1の共用体にint型のデータを格納した後にdouble型のデータを格納するとdouble型のデータで上書きされます。
共用体は条件により、取り扱うデータの型が異なるデータを格納する領域を確保するような場合に便利です。構造体を使うよりもメモリ使用量を減らせる可能性があります。
構造体と共用体はよく似ていますので、使い方もほとんど同じです。相違点は型指定子としてstructの代わりにunionを指定します。
四角形、三角形および、円の面積を計算します。面積を計算するためのデータ(長さや高さ)は図形毎に用意した構造体に格納しますが、それらは同時に使うことはないため、共用体として再定義して使用します。
$ ./ex12_1.prg 図形の面積を計算します 四角形 --- 1 三角形 --- 2 円 ------- 3 図形の種類を番号で指定してください ==> 1 縦と横の長さを入力してください ==> 2.5 3.5 面積は8.75です $ $ ./ex12_1.prg 図形の面積を計算します 四角形 --- 1 三角形 --- 2 円 ------- 3 図形の種類を番号で指定してください ==> 2 底辺と高さを入力してください ==> 2.5 3.5 面積は4.38です $ $ ./ex12_1.prg 図形の面積を計算します 四角形 --- 1 三角形 --- 2 円 ------- 3 図形の種類を番号で指定してください ==> 3 半径を入力してください ==> 2.5 面積は19.62です $ $ ./ex12_1.prg 図形の面積を計算します 四角形 --- 1 三角形 --- 2 円 ------- 3 図形の種類を番号で指定してください ==> 4 番号が不当です $