字符型
字符型用于存储单个字符,如字母、数字、标点符号等,在 C 语言中,字符实际上是以整数形式存储的,它使用 ASCII 编码表将字符映射到整数。

(图片来源网络,侵删)
char
- 描述: 存储一个单一字符。
- 大小: 1 字节 (8 bits)。
- 取值范围:
- 有符号: -128 到 127
- 无符号: 0 到 255
- 示例:
char grade = 'A'; char symbol = '@';
整型
整型用于存储没有小数部分的整数,即“全数字”。
int
- 描述: 最基本的整型数据类型,大小通常与系统的字长一致。
- 大小: 4 字节 (32 bits) 在 64 位系统上很常见。
- 取值范围:
- 有符号: -2,147,483,648 到 2,147,483,647 (即 -2³¹ 到 2³¹-1)
- 无符号: 0 到 4,294,967,295 (即 0 到 2³²-1)
- 示例:
int age = 25; int temperature = -10;
short int (或 short)
- 描述: 用于存储较小的整数,以节省内存。
- 大小: 2 字节 (16 bits)。
- 取值范围:
- 有符号: -32,768 到 32,767
- 无符号: 0 到 65,535
- 示例:
short int smallNumber = 150;
long int (或 long)
- 描述: 用于存储较大的整数,在 64 位系统上,它的 size 通常和
int一样。 - 大小: 4 字节 (32 bits) 或 8 字节 (64 bits),具体取决于编译器和系统。
- 取值范围: 如果是 8 字节,范围会大得多。
- 示例:
long int largeNumber = 123456789L; // 注意 L 后缀
long long int (或 long long)
- 描述: 用于存储非常大的整数,C99 标准引入。
- 大小: 8 字节 (64 bits)。
- 取值范围:
- 有符号: -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 (即 -2⁶³ 到 2⁶³-1)
- 无符号: 0 到 18,446,744,073,709,551,615 (即 0 到 2⁶⁴-1)
- 示例:
long long int veryLargeNumber = 9000000000000000000LL; // 注意 LL 后缀
整型的修饰符:signed 和 unsigned
signed: 表示该变量可以是正数、负数或零,这是int、short、long的默认行为。unsigned: 表示该变量只能是正数或零,不能为负,这使其正数范围扩大一倍。signed int a = -100; // 默认可以省略 signed unsigned int b = 100; // b 不能为负数
浮点型
浮点型用于存储带有小数部分的实数。
float
- 描述: 单精度浮点数,提供约 6-7 位有效数字。
- 大小: 4 字节 (32 bits)。
- 取值范围: 大约 ±3.4E-38 到 ±3.4E+38。
- 示例:
float price = 19.99f; // 注意 f 后缀,表示是 float 类型
double
- 描述: 双精度浮点数,提供约 15-16 位有效数字,精度更高,是浮点型的默认选择。
- 大小: 8 字节 (64 bits)。
- 取值范围: 大约 ±1.7E-308 到 ±1.7E+308。
- 示例:
double pi = 3.14159265358979;
long double
- 描述: 扩展精度浮点数,提供比
double更高的精度。 - 大小: 8、12 或 16 字节,取决于编译器和平台。
- 示例:
long double highPrecisionValue = 1.234567890123456L; // 注意 L 后缀
空类型
void 并不是一个可以存储数据的数据类型,它通常表示“无类型”或“无值”。
- 主要用途:
- 函数返回值: 当一个函数不返回任何值时,其返回类型被声明为
void。void printMessage() { printf("Hello, World!\n"); } - 函数参数: 当一个函数不接受任何参数时,可以使用
void。int getRandomNumber(void) { return rand(); } - 通用指针:
void*是一种可以指向任何数据类型的指针,但在使用前必须进行强制类型转换。
- 函数返回值: 当一个函数不返回任何值时,其返回类型被声明为
总结表格
| 类型分类 | 关键字 | 大小 (典型) | 取值范围 (典型) | 描述 |
|---|---|---|---|---|
| 字符型 | char |
1 字节 | -128 ~ 127 (有符号) | 存储单个字符 |
| 整型 | short |
2 字节 | -32,768 ~ 32,767 | 较小的整数 |
int |
4 字节 | -2,147,483,648 ~ 2,147,483,647 | 基本整数类型 | |
long |
4 或 8 字节 | 范围随大小变化 | 较大的整数 | |
long long |
8 字节 | ±9.2 x 10¹⁸ | 非常大的整数 | |
| 浮点型 | float |
4 字节 | 约 ±3.4E±38 | 单精度,6-7位有效数字 |
double |
8 字节 | 约 ±1.7E±308 | 双精度,15-16位有效数字 | |
long double |
8/12/16 字节 | 范围和精度更高 | 扩展精度 | |
| 空类型 | void |
N/A | N/A | 无类型,用于函数返回/参数 |
重要提示
- 大小不是绝对的: 表格中的大小是“典型”值,尤其是在现代 64 位系统上,C 标准只规定了
sizeof(char) == 1,其他类型的大小必须大于等于前一个类型(sizeof(short) >= sizeof(char)),使用sizeof()运算符可以准确获取在你当前系统上某个类型的大小。 - 选择合适的数据类型: 根据你的需求选择合适的数据类型非常重要,如果确定一个数永远不会是负数,就使用
unsigned类型来扩大其正数范围,如果需要高精度,就使用double而不是float。

(图片来源网络,侵删)
