C言語の基本データ型と派生データ型について解説します。

目次

基本データ型

C言語の基本データ型には次のような種類があります。

char

8ビット符号付き整数型

char c;
char a[8];
char *p;

short int

16ビット符号付き整数型

short

short intと同じ

int

16ビットまたは32ビット符号付き整数型

long int

32ビットまたは64ビット符号付き整数型

long

long intと同じ

long long

64ビット符号付き整数型 (Solaris)

enum

列挙型

float

単精度浮動小数点数型 (32ビット)

float 型では単精度浮動小数点演算ができます。

float f1, f2, f3;
f1 = f2 + f3;

旧仕様 (K&R) では次のような順番で演算されました。

  1. 両オペランド(f2とf3)を倍精度化
  2. 倍精度(double型)で演算
  3. 倍精度の結果を単精度化
  4. 単精度の結果を f1 に格納

しかし、ANSI ではすべて単精度で演算されます。

double

倍精度浮動小数点数型 (64ビット)

long double

128ビット浮動小数点数型 (Solaris)

void

voidは引数または戻り値が無いことを表す特殊なデータ型です。たとえば、引数を取らない関数は次のように定義します。

int getchar(void);

戻り値を返さない関数は次のように定義します。

void exit(int status);

void * は汎用の(型に依存しない)ポインタ型を表します。たとえば、汎用のポインタ型を引数に取る関数は次のように定義します。

void free(void *ptr);

汎用のポインタ型を返す関数は次のように定義します。

void *malloc(size_t size);

汎用型ポインタは型を特定することができないため、ポインタが指し示す値を直接参照することができません。他のポインタ型に変換してから参照します。

void *p;
int *i;

p = malloc(sizeof(int));
*p = 0; /* NG */
i = p;
*i = 0; /* OK */

void ** のようにvoid型のポインタへのポインタにすることはできません。

C言語の派生データ型

基本データ型の他にシステムコールやライブラリ関数で使用される派生データ型があります。 実際は何らかの基本データ型なのですが、移植性を高めるために別の名前が付けられています。

派生データ型はマクロで定義されているため、ヘッダーファイルをインクルードする必要があります。派生データ型によってインクルードするヘッダーファイルの名前は異なりますが、たいていの派生データ型は sys/types.h をインクルードすることで使用できるようになります。

派生データ型には、次のようなものがあります。

clock_t
システムの時間をクロック刻み (clock tick) で表す型
dev_t
デバイス番号に使用される型
off_t
ファイルサイズとオフセット(先頭からの相対位置)用に使用される型
ptrdiff_t
2つのポインタの減算結果を示す符号付き整数型
size_t
メモリー内のオブジェクトのサイズ(バイト単位)用に使用される型
ssize_t
バイト数またはエラーのどちらを返すこともある関数によって使用される符号付きサイズ型
time_t
秒単位の時間用に使用される型
intptr_t
ポインタを格納するために十分なサイズの符号付き整数型 (Solaris)
uintptr_t
ポインタを格納するために十分なサイズの符号なし整数型 (Solaris)
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送