c 语言作为一门面向过程的系统编程语言,并未定义“原始类型”(primitive types)这一术语;它只有标准规定的基本数据类型(fundamental types),其大小和行为依具体实现而定,以兼顾效率与硬件适配性。
在 Java 等面向对象语言中,“primitive types”是相对于“reference types”(如类、数组、接口)提出的概念,用于强调其非对象性、栈上存储、值传递等特性。但 C 语言既无对象模型,也无运行时类型系统或自动内存管理机制,因此根本不存在“原始 vs 引用”的二元分类基础——所有 C 类型本质上都是“值类型”,且直接映射到底层内存布局。
C 标准(ISO/IEC 9899)将数据类型分为几大类,其中最核心的是基本类型(basic types),包括:
-
整数类型(integer types):
char、signed char、unsigned char
short int(或 short)、unsigned short int(或 unsigned short)
int、unsigned int
long int(或 long)、unsigned long int(或 unsigned long)
long long int(C99 起)、unsigned long long int -
实浮点类型(real floating types):
float、double、long double -
空类型(void):用于表示无类型,常见于函数返回值或指针泛化。
值得注意的是,C 标准不规定这些类型的精确位宽,仅给出最小范围要求(如 int 至少 16 位,long 至少 32 位)。这与 Java 的严格定义(如 int 恒为 32 位有符号补码)形成鲜明对比。例如,在 8 位单片机上,int 可能仅为 16 位;而在现代 x86-64 Linux 系统中,int 通常为 32 位,long 为 64 位(LP64 模型)。