Cのデータ型


C 言語では、データ型は、さまざまな型の変数または関数を宣言するための広範なシステムを指します。変数のタイプによって、変数ストレージが占めるスペースの量と、格納されたビット パターンがどのように解釈されるかが決まります。

C の型は次の型に分類できます:

シリアル番号 型と説明
1基本型:
整数型と整数型の 2 つの型を含む算術型です。浮動小数点型。
2列挙型:
これらは算術型でもあり、プログラム内で特定の離散整数値のみを割り当てることができる変数を定義するために使用されます。
3void 型:
型指定子 void は、値が使用できないことを示します。
4派生型:
それらには、ポインター型、配列型、構造体型、共用体型、関数型が含まれます。

配列型と構造型を総称して集合体型と呼びます。関数の型は、関数の戻り値の型を指します。この章の残りの部分では基本的なタイプを紹介し、他のいくつかのタイプについては次の章で説明します。

整数型

次の表は、標準の整数型のストレージ サイズと値の範囲の詳細を示しています。

-128~127または0~255unsigned char1バイト0〜255signed char1バイト-128〜127int2または4バイト -32,768 ~ 32,767 または -2,147,483,648 ~ 2,147,483,647unsigned int2 または 4 バイト 0 ~ 65,535 または 0 ~ 4,294,967,2 95short2バイト- 32,768~32,767 符号なしshort2バイト0〜65,535
long4バイト-2,147,483,648〜2,147,483,6
符号なしlong4バイト0から4,294,967,295

さまざまなタイプのストレージ サイズはシステム ビット数に関連していることに注意してください。ただし、現在最も一般的なのは 64 ビット システムです。

以下に、32 ビット システムと 64 ビット システムのストレージ サイズの違いを示します (Windows も同様):

特定のプラットフォームで特定の型または変数の正確なサイズを取得するには、 sizeof 演算子を使用できます。式 sizeof(type) は、オブジェクトまたは型のストレージ サイズをバイト単位で取得します。次の例は、int 型のサイズを取得する方法を示しています。

#include <stdio.h>#include <limits.h>int main(){
   printf("int 存储大小 : %lu \n", sizeof(int));   
   return 0;}

上記のプログラムを Linux 上でコンパイルして実行すると、次の結果が生成されます。

int 存储大小 : 4

浮動小数点型

次の表は、標準の浮動小数点に関する情報を示しています。型のストレージ サイズ、値の範囲、精度の詳細:

typestorage sizevalue rangeprecision
float4 bytes 1.2E-38 to 3.4E+38 小数点以下6桁
double8バイト2.3E-308から1.7E+308小数点以下15桁
long double16バイト3.4E 32 ~ 1.1 E+4932 小数点以下 19 桁

ヘッダー ファイル float.h は、プログラム内でこれらの値と実数のバイナリ表現に関するその他の詳細を使用できるようにするマクロを定義します。次の例では、浮動小数点型が占有する記憶領域とその範囲値を出力します。

#include <stdio.h>#include <float.h>int main(){
   printf("float 存储最大字节数 : %lu \n", sizeof(float));
   printf("float 最小值: %E\n", FLT_MIN );
   printf("float 最大值: %E\n", FLT_MAX );
   printf("精度值: %d\n", FLT_DIG );   
   return 0;}

上記のプログラムを Linux 上でコンパイルして実行すると、次の結果が生成されます。

float 存储最大字节数 : 4 float 最小值: 1.175494E-38float 最大值: 3.402823E+38精度值: 6

void 型

void 型の指定利用可能な値がありません。通常、次の 3 つの状況で使用されます。

シリアル番号 タイプと説明
1 関数が null を返す
C には、値を返さないさまざまな関数があります。彼らは空で戻ってくると言うことができます。値を返さない関数の戻り値の型は null です。たとえば、 void exit (int status);
2関数のパラメータは空です
C には、パラメータを受け入れないさまざまな関数があります。パラメータのない関数は void を受け入れることができます。たとえば、int rand(void);
3pointer は void を指します
void 型のポインター * は、型ではなくオブジェクトのアドレスを表します。たとえば、メモリ割り当て関数 void *malloc( size_t size ); は、任意のデータ型に変換できる void へのポインターを返します。

ここで void 型をまだ完全に理解できない場合でも、あまり心配しないでください。これらの概念については後続の章で詳しく説明します。