- 整型
- 浮点型
- 字符型
- 空类型
下面我们详细讲解每一类。

(图片来源网络,侵删)
整型
整型用于存储整数,没有小数部分,根据存储范围大小的不同,C语言提供了多种整型类型。
| 类型 | 关键字 | 描述 | 典型大小 (字节) | 典型范围 |
|---|---|---|---|---|
| 基本整型 | int |
最常用的整型,大小由编译器决定,通常与机器字长相同。 | 4 | -2,147,483,648 到 2,147,483,647 |
| 短整型 | short |
short int的简称,保证不大于int。 |
2 | -32,768 到 32,767 |
| 长整型 | long |
long int的简称,保证不小于int。 |
4 或 8 | (-2³¹ 到 2³¹-1) 或 (-2⁶³ 到 2⁶³-1) |
| 双长整型 | long long |
long long int的简称,保证不小于long。 |
8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| 无符号整型 | unsigned |
可以与以上任何整型组合,表示该类型的变量不能为负数,因此正数范围扩大一倍。 | - | unsigned int: 0 到 4,294,967,295 |
| 有符号整型 | signed |
默认情况下,所有整型都是有符号的,可以存储正数、负数和零。 | - | signed int (等同于 int) |
修饰符 signed 和 unsigned:
signed: 可以存储正数、负数和零。unsigned: 只能存储零和正数。
示例代码:
#include <stdio.h>
int main() {
int a = 100;
short b = 32767;
long c = 123456789L; // L后缀表示long类型常量
long long d = 123456789012345LL; // LL后缀表示long long类型常量
unsigned int e = 40000; // 不能为负数
printf("int a = %d\n", a);
printf("short b = %d\n", b);
printf("long c = %ld\n", c); // 注意打印long类型用%ld
printf("long long d = %lld\n", d); // 注意打印long long类型用%lld
printf("unsigned int e = %u\n", e); // 注意打印unsigned int类型用%u
return 0;
}
浮点型
浮点型用于存储带有小数部分的实数,C语言提供了三种浮点类型,精度和范围各不相同。

(图片来源网络,侵删)
| 类型 | 关键字 | 描述 | 典型大小 (字节) | 精度 (位数) |
|---|---|---|---|---|
| 单精度浮点型 | float |
占用内存较少,精度较低。 | 4 | 约 6-9 位有效数字 |
| 双精度浮点型 | double |
默认的浮点类型,精度和范围更高。 | 8 | 约 15-17 位有效数字 |
| 长双精度浮点型 | long double |
精度和范围通常最高。 | 8 或 16 | 通常与double相同或更高 |
示例代码:
#include <stdio.h>
int main() {
float f = 3.14159f; // f后缀表示float类型常量
double d = 3.14159265358979;
long double ld = 3.141592653589793238L; // L后缀表示long double类型常量
printf("float f = %.2f\n", f); // %.2f表示保留2位小数
printf("double d = %.9f\n", d); // %.9f表示保留9位小数
printf("long double ld = %.15Lf\n", ld); // 注意打印long double用%Lf
return 0;
}
字符型
字符型用于存储单个字符。
| 类型 | 关键字 | 描述 | 典型大小 (字节) | 典型范围 |
|---|---|---|---|---|
| 字符型 | char |
存储 ASCII 字符或小整数。 | 1 | -128 到 127 (signed) 或 0 到 255 (unsigned) |
重要说明:
- 在C语言中,
char类型本质上是一个小整型,字符在内存中以其对应的 ASCII 码值存储。 char也可以被signed或unsigned修饰,但默认是signed还是unsigned由编译器决定,为了可移植性,如果你明确需要处理0-255范围的值,最好使用unsigned char。
示例代码:

(图片来源网络,侵删)
#include <stdio.h>
int main() {
char c1 = 'A'; // 用单引号
char c2 = 65; // 'A'的ASCII码值是65
printf("c1 = %c, ASCII = %d\n", c1, c1); // %c打印字符, %d打印其ASCII码
printf("c2 = %c, ASCII = %d\n", c2, c2);
return 0;
}
空类型
| 类型 | 关键字 | 描述 |
|---|---|---|
| 空类型 | void |
void 的字面意思是“无类型”或“空类型”,它不能用来定义变量,主要有三个用途: |
| 函数返回值: 表示函数不返回任何值。 | ||
| 函数参数: 表示函数不接受任何参数。 | ||
通用指针: void* 可以指向任何类型的数据,但在使用前必须强制转换。 |
示例代码:
#include <stdio.h>
// 一个不返回任何值的函数
void print_message() {
printf("This function returns nothing.\n");
}
int main() {
// 调用void返回类型的函数
print_message();
// void指针的示例
int num = 10;
void *ptr = # // void指针可以指向任何变量
// 使用void指针前必须强制转换
int *int_ptr = (int *)ptr;
printf("Value via void pointer: %d\n", *int_ptr);
return 0; // main函数的返回值int可以省略,默认为0
}
总结与补充
| 类别 | 关键字 | 特点 |
|---|---|---|
| 整型 | int, short, long, long long |
存储整数,有signed和unsigned之分。 |
| 浮点型 | float, double, long double |
存储实数,精度和范围递增。 |
| 字符型 | char |
存储单个字符,本质上是小整型。 |
| 空类型 | void |
无类型,用于函数返回值、参数和通用指针。 |
如何确定类型的大小?
你可以使用 sizeof 运算符来查看在你的特定系统和编译器上,每种类型占用的字节数。
#include <stdio.h>
int main() {
printf("Size of int: %zu bytes\n", sizeof(int));
printf("Size of short: %zu bytes\n", sizeof(short));
printf("Size of long: %zu bytes\n", sizeof(long));
printf("Size of long long: %zu bytes\n", sizeof(long long));
printf("Size of float: %zu bytes\n", sizeof(float));
printf("Size of double: %zu bytes\n", sizeof(double));
printf("Size of long double: %zu bytes\n", sizeof(long double));
printf("Size of char: %zu byte\n", sizeof(char));
return 0;
}
注意:
sizeof返回的是size_t类型,使用%zu作为格式化字符串是标准做法。
理解这些基本数据类型是学习C语言的第一步,也是编写高效、正确程序的基础。
