
c语言中不存在“原始类型”(primitive types)这一正式概念——这不是术语缺失,而是根本性范式差异所致。java引入“primitive types”是为与面向对象的引用类型(如object、string)形成明确二分;而c是过程式、无对象模型的语言,所有类型本质上都是内存布局的直接描述,不存在“非原始”的对应物。
C标准(ISO/IEC 9899)并未使用“primitive”一词,而是定义了基本类型(basic types) 和派生类型(derived types)。其中,基本类型包括:
- 整型家族:_Bool(C99)、char、signed char、unsigned char、short int、unsigned short int、int、unsigned int、long int、unsigned long int、long long int、unsigned long long int(C99起);
- 浮点型:float、double、long double;
- 空类型:void(仅用于函数返回或指针泛型,不可实例化)。
值得注意的是,C对这些类型的最小取值范围有严格要求(如int ≥16位),但实际位宽由实现决定。例如:
#include#include int main() { printf("sizeof(int) = %zu bytes\n", sizeof(int)); printf("INT_MIN = %d, INT_MAX = %d\n", INT_MIN, INT_MAX); return 0; }
在32位x86系统上通常输出 sizeof(int) = 4,而在某些嵌入式平台可能为2字节——这恰恰体现了C“贴近硬件”的设计哲学,与Java强制规定int恒为32位形成鲜明对比。
因此,与其追问“C有哪些primitive types”,更准确的问题是:“C有哪些基本数据类型,以及它们如何被标准约束?”答案是:C的基本类型清单由标准明确定义,但其具体实现(尤其是大小和对齐)交由编译器根据目标平台优化,这是C高效、可移植的核心机制,而非缺陷。开发者应依赖
立即学习“C语言免费学习笔记(深入)”;










