基本数据类型
这是C语言最基础、最常用的数据类型,它们是构成其他复杂数据类型的基石,基本数据类型又可以分为三类:整型、浮点型和字符型。

(图片来源网络,侵删)
a) 整型
用于表示整数。
| 数据类型 | 描述 | 典型大小(字节) | 范围示例 |
|---|---|---|---|
char |
字符或小整数 | 1 | -128 到 127 或 0 到 255 |
unsigned char |
无符号字符/小整数 | 1 | 0 到 255 |
short |
短整型 | 2 | -32,768 到 32,767 |
unsigned short |
无符号短整型 | 2 | 0 到 65,535 |
int |
整型 | 4 | -2,147,483,648 到 2,147,483,647 |
unsigned int |
无符号整型 | 4 | 0 到 4,294,967,295 |
long |
长整型 | 4 或 8 | (取决于系统) |
unsigned long |
无符号长整型 | 4 或 8 | (取决于系统) |
long long |
双长整型 (C99标准) | 8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long long |
无符号双长整型 | 8 | 0 到 18,446,744,073,709,551,615 |
注意:
char类型在C语言中本质上是整型,因为它在内存中存储的是字符的ASCII码值。int类型的大小在不同平台(如32位和64位系统)上可能不同,通常是系统字长。unsigned关键字用于表示无符号类型,即没有正负之分,范围全部为正数。
b) 浮点型
用于表示带有小数部分的实数。
| 数据类型 | 描述 | 典型大小(字节) | 精度示例 |
|---|---|---|---|
float |
单精度浮点数 | 4 | 约6-7位有效数字 |
double |
双精度浮点数 | 8 | 约15-16位有效数字 |
long double |
长双精度浮点数 | 8 或 16 | 通常比 double 精度更高或相同 |
示例:

(图片来源网络,侵删)
float price = 99.99f; // f后缀表示这是一个float类型常量 double pi = 3.14159265358979; long double large_number = 1.234567890123456L; // L后缀表示long double
c) 字符型
专门用于存储单个字符。
| 数据类型 | 描述 | 大小 |
|---|---|---|
char |
存储一个字符,如 'A', 'b', '7' | 1字节 |
示例:
char grade = 'A'; char newline = '\n'; // 转义字符,代表换行
构造数据类型
也称为聚合数据类型,它们是由基本数据类型或其他构造类型组合而成的。
a) 数组
定义:一组相同类型的数据元素的集合,这些元素在内存中连续存放。 特点:大小在定义时必须是常量或常量表达式。

(图片来源网络,侵删)
示例:
int scores[5]; // 一个可以存放5个整数的整型数组 char name[20]; // 一个可以存放20个字符的字符数组(即字符串) float prices[10]; // 一个存放10个浮点数的数组
b) 结构体
定义:将不同类型的数据组合成一个单一的、自定义的类型,每个成员都有自己的内存空间。 特点:成员可以是不同的数据类型。
示例:
// 定义一个名为 Student 的结构体类型
struct Student {
int id; // 学号
char name[50]; // 姓名
float score; // 分数
};
// 声明一个 Student 类型的变量
struct Student student1;
student1.id = 1001;
strcpy(student1.name, "Zhang San"); // strcpy用于复制字符串
student1.score = 95.5;
c) 共用体
定义:一种特殊的构造类型,它允许在同一块内存空间中存储不同类型的数据,但任何时候只有一个成员的值是有效的。 特点:所有成员共享同一段内存,其大小是最大成员的大小。
示例:
// 定义一个名为 Data 的共用体类型
union Data {
int i;
float f;
char c;
};
// 声明一个 Data 类型的变量
union Data data;
data.i = 10;
printf("%d\n", data.i); // 输出 10
data.f = 220.5;
printf("%f\n", data.f); // 输出 220.5,data.i 的值已经被破坏
d) 枚举
定义:为一组整型常数赋予有意义的名字,枚举量默认从0开始,依次递增。
示例:
// 定义一个名为 WeekDay 的枚举类型
enum WeekDay {
MONDAY, // 值为 0
TUESDAY, // 值为 1
WEDNESDAY, // 值为 2
THURSDAY, // 值为 3
FRIDAY, // 值为 4
SATURDAY, // 值为 5
SUNDAY // 值为 6
};
// 声明一个 WeekDay 类型的变量
enum WeekDay today = FRIDAY;
printf("Today is day number: %d\n", today); // 输出 4
指针数据类型
定义:一种特殊的数据类型,它存储的是另一个变量在内存中的地址。
特点:指针是C语言的强大功能,但它也是最容易出错的地方之一,指针必须先指向一个有效的内存地址才能安全使用。
示例:
int num = 10;
int *ptr; // 声明一个指向整型的指针变量 ptr
ptr = # // 将 num 的地址赋给 ptr
printf("Value of num: %d\n", num); // 输出 10
printf("Value pointed by ptr: %d\n", *ptr); // *ptr 是解引用操作,输出 10
printf("Address of num: %p\n", (void*)&num); // 输出 num 的地址
printf("Value of ptr: %p\n", (void*)ptr); // 输出 ptr 存储的地址(与num的地址相同)
注意:
- 指针的类型必须与它所指向的变量的类型匹配(
int*指向int)。 void*是一种特殊的指针类型,它可以指向任何类型的数据,但在使用前通常需要强制转换。
空类型
定义:void 类型表示“无类型”或“空类型”。
用途:
- 函数返回值:当函数不返回任何值时,其返回类型应声明为
void。void sayHello() { printf("Hello, World!\n"); } - 函数参数:当函数不接受任何参数时,在C语言中(尤其是在K&R风格或现代标准中)可以使用
void来明确表示。int getRandomNumber(void) { return rand(); } - 通用指针:如上所述,
void*可以作为通用指针类型。
C语言的数据类型体系非常灵活和强大,理解这些数据类型的区别、大小和用途是编写高效、健壮的C程序的基础。
| 类别 | 类型名称 | 描述 |
|---|---|---|
| 基本类型 | char, short, int, long, long long |
整数 |
float, double, long double |
浮点数 | |
char (用于字符) |
单个字符 | |
| 构造类型 | array |
相同类型元素的集合 |
struct |
不同类型成员的聚合 | |
union |
共享内存的不同类型成员 | |
enum |
命名的整型常量集合 | |
| 指针类型 | type * |
指向 type 类型数据的地址 |
| 空类型 | void |
无类型,用于函数返回值或参数 |
