C语言的数据类型是构建程序的基础,它定义了变量可以存储的数据种类、大小以及可以对其执行的操作,我们可以将它们分为四大类:

(图片来源网络,侵删)
- 基本数据类型
- 构造数据类型
- 指针类型
- 空类型
基本数据类型是构成其他所有类型的基础,也是我们首先要掌握的。
C语言的基本数据类型
基本数据类型也称为“内置数据类型”或“标量类型”,它们是语言本身直接提供的,用于表示单个值,主要分为三类:整型、浮点型和字符型。
整型
整型用于表示没有小数部分的整数,10, -5, 0。
| 类型名称 | 关键字 | 描述 | 典型大小 (字节) | 范围示例 (有符号) |
|---|---|---|---|---|
| 字符型 | char |
通常用于存储一个字符,但在底层它本质上是小的整数。 | 1 | -128 到 127 |
| 短整型 | short |
短整型,占用空间比 int 小或相等。 |
2 | -32,768 到 32,767 |
| 整型 | int |
系统最“自然”的整数大小,通常是机器的字长。 | 4 | -2,147,483,648 到 2,147,483,647 |
| 长整型 | long |
长整型,保证不小于 int。 |
4 或 8 | 同 int 或更大 |
| 长长整型 | long long |
更长的整型,保证不小于 long。 |
8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
修饰符:
整型还可以使用 signed (有符号) 和 unsigned (无符号) 修饰符:

(图片来源网络,侵删)
signed: 可以存储正数、负数和零,这是默认的。unsigned: 只能存储非负数(0和正数),但其正数范围是signed类型的两倍。
unsigned int: 范围为 0 到 4,294,967,295unsigned char: 范围为 0 到 255
注意: char 类型比较特殊,它既可以被用作字符('A'),也可以被用作整数(65,因为 'A' 的ASCII码就是65)。
浮点型
浮点型用于表示带有小数部分的实数,14, -0.5, 0e-5。
| 类型名称 | 关键字 | 描述 | 典型大小 (字节) | 精度/范围示例 |
|---|---|---|---|---|
| 单精度浮点型 | float |
单精度浮点数,占用空间较小,精度较低。 | 4 | 约 7 位有效数字 |
| 双精度浮点型 | double |
双精度浮点数,占用空间和精度是 float 的两倍,是默认的浮点类型。 |
8 | 约 15-16 位有效数字 |
| 长双精度浮点型 | long double |
长双精度浮点数,精度和范围通常不小于 double。 |
8 或 16 | 通常比 double 更高精度 |
选择建议:
- 如果对精度要求不高(如游戏坐标、简单的科学计算),可以使用
float。 - 对于绝大多数需要浮点数的场景(如财务计算、物理模拟),强烈推荐使用
double,因为它能提供更高的精度,避免很多精度陷阱。 long double用于需要极高精度的特殊科学计算领域。
字符型
字符型用于表示单个字符,如字母、数字、标点符号等。

(图片来源网络,侵删)
| 类型名称 | 关键字 | 描述 | 典型大小 (字节) |
|---|---|---|---|
| 字符型 | char |
存储一个字符,如 'a', 'Z', '9'。 |
1 |
重要概念:
- 字符的本质:在C语言中,字符变量
char实际上存储的是该字符的ASCII码值(或其他编码标准,如Unicode的UTF-8),它是一个整数。char类型可以参与整数运算。 - 字符常量:用单引号括起来,如
'A'。 - 字符串常量:用双引号括起来,如
"Hello",字符串在C语言中实际上是由字符数组构成的,以空字符'\0'
示例:
char c = 'A';
// 'A' 的ASCII码是65
printf("%c\n", c); // 输出: A
printf("%d\n", c); // 输出: 65
void 类型
void 是一个特殊的关键字,字面意思是“空的”、“无类型”,它不表示数据本身,而是有几种重要的用途:
-
函数无返回值:当函数不需要返回任何值时,其返回类型声明为
void。void printMessage() { printf("Hello, World!\n"); } -
函数无参数:当函数不接受任何参数时,可以使用
void作为参数列表。int getRandomNumber(void) { return rand(); } -
通用指针:
void *类型的指针可以指向任何类型的数据,但在使用前必须将其强制转换为具体的指针类型。void *generic_ptr; int i = 10; generic_ptr = &i; // void* 指向 int int *int_ptr = (int *)generic_ptr; // 强制转换回 int*
总结表格
| 类型分类 | 类型名称 | 关键字 | 描述 |
|---|---|---|---|
| 整型 | 字符型 | char |
存储单个字符或小整数 |
| 短整型 | short |
短整型 | |
| 整型 | int |
系统默认的整数类型 | |
| 长整型 | long |
长整型 | |
| 长长整型 | long long |
更长的整型 | |
| 浮点型 | 单精度浮点型 | float |
单精度,精度较低 |
| 双精度浮点型 | double |
双精度,默认浮点类型 | |
| 长双精度浮点型 | long double |
长双精度,精度更高 | |
| 字符型 | 字符型 | char |
同整型中的 char |
| 空类型 | 空类型 | void |
无类型,用于函数返回值、参数和通用指针 |
如何选择?
- 存储整数:首选
int,如果数值可能超出int的范围,或者需要节省空间,再考虑short或long long,如果确定数值不会是负数,使用unsigned可以扩大正数范围。 - 存储小数:首选
double,除非你有非常明确的理由(如内存极度紧张且对精度要求不高),否则不要使用float。 - 存储单个字符:使用
char。
掌握这些基本数据类型是学习C语言的第一步,也是后续学习指针、数组、结构体等更复杂概念的基础。
