C語言資料型別

灰色v碰觸發表於2018-03-21

參考文章

說明符 + 限定符

資料型別一覽表

算數型別(arithmetic type)

字元型別

signed char     有符號字元
unsigned char   無符號字元
char            字元(可以是 signed char 或 unsigned char,由實現定義)

// 除此之外,還定義了寬字元(c11):

1. wchar_t
2. char16_t
3. char32_t

整數型別

1. 短整形

short
signed short
short int
signed short int

// 等價於
short int

2. 無符號短整形

unsigned short
unsigned short int

// 等價於
unsigned short int

3. 整形

signed
int
signed int

// 等價於
int

4. 無符號整形

unsigned
unsigned int

// 等價於
unsigned int

5. 長整型

long
long int
signed long
signed long int

// 等價於
long int

6. 無符號長整型

unsigned long
unsigned long int

// 等價於
unsigned long int

7. long long int(c99,不懂該怎麼稱呼了…)

long long
long long int
signed long long
signed long long int

// 等價於
long long int

8. unsigned long long int(c99)

unsigned long long
unsigned long long int

// 等價於
unsigned long long int

資料模型

每種實現對資料型別的大小選擇統稱為 資料模型,以下四種是大家普遍接受的資料模型:

32 System

1. LP32 2/4/4,(int 16bit,long & pointer 32bit)
    1. 僅出現在 win16 API 中
2. LP32 4/4/4,(int,long,pointer 32bit)
    1. win32 API
    2. 類 unix 系統(linux or mac)

64 System

3. LP64 4/4/8,(int & long 32big,pointer 64 bit)
4. LP64 4/8/8,(int 32 bit,long & pointer 64 bit)

其他模型非常罕見(幾乎可以不用理會,實際就是無需理會)!舉一個例子,資料模型 LP64 8/8/8(int & long & pointer 64 bit),這種資料模型只出現在早期的 unix 機器上

浮點型別

1. float    單精度浮點型    32bit(4byte)
2. double   雙精度浮點型    64bit(8byte)
3. long double 擴充套件精密浮點型(需要機器支援) >=64 bit

如果使用了 complex.h,表示需要用到複雜的浮點數

以下寫法都是有效的:

float _complex          float complex
double _complex         double complex
long double _complex    long double complex

float _imaginary        float imaginary
double _imaginary       double imaginary
long double _imaginary  long double imaginary

原子型別(atomic type),限定符

支援以下三種寫法:

// p 是指向原子 const int 的指標
_Atomic const int * p1;
// 同上
const atomic_int * p2;
// 同上
const Atomic(int) * p3;

原子型別的物件是唯一不受資料競爭的物件,也就是說,它們可以由兩個執行緒併發地修改,或者由另一個執行緒修改。

擁有以下四個相關屬性:

1. 寫入一致性(write-write-coherence)
2. 讀取一致性(read-read-coherence)
3. 讀寫一致性(read-write-coherence)
4. 寫讀一致性(write-read-coherence)

具體解釋參考官方文件:atomic type

目前的 visual studio 中不支援該型別

由 typedef 引入的說明符

// 宣告 int_t 是 int 的別名
typedef int int_t

// 進階
// char_t 是 char 的別名
// chart_p 是 char* 的別名
// fp 是 char(*)(void) 的別名
typedef char char_t, *char_p, (*fp)(void)

修飾符

const

// 常量不可改動
const int a = 10;

volatile

// 提醒計算機:
// a 變數可能會實時更新,不能快取
// 這個一般多用在多執行緒場景下
volatile int a = 10;

restrict

restrict 詳解

特殊的常量

INFINITY    無窮
NaN         非數字

數值範圍

如果需要準確的瞭解到數值的範圍,請參閱(頁面底部):各種型別對應的數值範圍

相關文章