C語言資料型別的分類方式如下:
-
基本型別
-
標準整數型別,以及擴充的整數型別
-
實數浮點型別,以及複數浮點型別
-
列舉型別
-
void型別
-
派生型別
-
聯合型別
-
函數型別
基本型別和列舉型別,統稱算術型別(arithmetic type)。算術型別和指標型別,統稱為標量型別(scalar type)。陣列型別和結構型別被統稱為聚合型別(aggregate type)。聯合型別(union type)不被認為是聚合型別,因為在任一時刻下,聯合中只有一個成員可以具有值。
函數型別(function type)描述了函數的介面。這指的是,該型別既指定了函數返回值的型別,又指定了在呼叫該函數時,傳遞給函數的所有引數的型別。
其他所有資料型別都是用來描述物件。這種描述可能包括也可能沒有包括物件儲存空間大小資訊。如果包括,這種資料型別就稱為物件型別(object type);如果不包括,就是不完整型別(incomplete type)。
下例,由外部定義的陣列變數就是一個不完整型別:
extern float fArr[]; // 外部宣告
這行程式碼宣告 fArr 為一個陣列,其元素為 float 型別。然而,由於上述程式碼沒有指定該陣列的大小,所以 fArr 的型別是不完整的。只要全域性陣列 fArr 在該程式的其他位置(例如,在其他原始檔中)通過指定陣列大小來完成定義,則上述宣告足以使得在當前作用域內使用該陣列。
某些資料型別在定義時使用了多個關鍵字,例如 unsigned short。在這種情況下,不限制關鍵字排列次序。但是,關鍵字次序存在習慣性的排列方式,本書遵照該慣例。