C语言中的数据类型是用于声明变量或函数的,它决定了变量可以存储哪种类型的数据,以及可以对它执行哪些操作,基本数据类型是构成复杂数据类型(如数组、结构体、指针等)的基础。

(图片来源网络,侵删)
C语言的基本数据类型主要分为三大类:整型、浮点型 和 字符型。
整型
整型用于表示整数,即没有小数部分的数字。
| 类型名称 | 关键字 | 描述 | 典型字节大小 | 取值范围示例 |
|---|---|---|---|---|
| 字符型 | char |
通常用于存储单个字符(如 'a', '1'),但在底层它本质上是一个小的整型。 | 1字节 | -128 到 127 |
| 短整型 | short |
短整型,其大小不小于 char,不大于 int。 |
2字节 | -32,768 到 32,767 |
| 整型 | int |
系统最“自然”的整数大小,通常与机器的字长相同。 | 4字节 | -2,147,483,648 到 2,147,483,647 |
| 长整型 | long |
长整型,其大小不小于 int。 |
4或8字节 | 4字节同int,8字节则范围更大 |
| 长长整型 | long long |
更长的整型,C99标准引入,保证不小于long。 |
8字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
修饰符:signed 和 unsigned
整型默认是 signed(有符号)的,意味着它可以存储正数、负数和零,如果使用 unsigned(无符号)修饰符,则变量只能存储非负数(0和正数),这相当于将正数范围扩大一倍。
signed char: -128 到 127unsigned char: 0 到 255unsigned int: 0 到 4,294,967,295 (对于4字节的int)
浮点型
浮点型用于表示带有小数部分的实数,即浮点数。

(图片来源网络,侵删)
| 类型名称 | 关键字 | 描述 | 典型字节大小 | 精度和范围 |
|---|---|---|---|---|
| 单精度浮点型 | float |
单精度浮点数,占用空间较小,精度较低。 | 4字节 | 约6-7位有效数字 |
| 双精度浮点型 | double |
双精度浮点数,是float的扩展,精度更高,范围更大。 |
8字节 | 约15-16位有效数字 |
| 长双精度浮点型 | long double |
长双精度浮点数,提供比double更高的精度(在某些平台上)。 |
8或16字节 | 通常比double更高精度 |
示例:
float price = 19.99f; // 注意:f后缀表示这是一个float常量 double pi = 3.141592653589793; long double big_number = 1.234567890123456789L; // L后缀表示long double
字符型
字符型专门用于存储单个字符。
| 类型名称 | 关键字 | 描述 | 典型字节大小 |
|---|---|---|---|
| 字符型 | char |
存储 ASCII 或 Unicode 字符,如 'A', 'z', '9', '$'。 | 1字节 |
重要概念:
在C语言中,char 类型在本质上是一个小范围的整型,字符在内存中以 ASCII 码(或其他编码)的形式存储,所以你可以对字符进行算术运算。
char c = 'A'; // 'A'的ASCII码是65 int i = c; // i 的值将是 65 c = c + 1; // c 的值将变为 'B' (因为65+1=66,66是'B'的ASCII码)
空类型
void 是一个特殊的数据类型,字面意思是“空的”或“无类型的”,它主要有两个用途:

(图片来源网络,侵删)
-
表示函数没有返回值:
void print_message() { printf("Hello, World!\n"); // 函数执行完毕,不返回任何值 } -
表示函数没有参数:
int get_random_number(void) { return rand(); } // 使用void明确表示该函数不接受任何参数
void 不能用来声明变量,void v; 是错误的。
总结表格
| 类别 | 类型名称 | 关键字 | 大小(典型值) | 描述 |
|---|---|---|---|---|
| 整型 | 字符型 | char |
1字节 | 存储字符或小整数 |
| 短整型 | short |
2字节 | 短整数 | |
| 整型 | int |
4字节 | 标准整数 | |
| 长整型 | long |
4或8字节 | 长整数 | |
| 长长整型 | long long |
8字节 | 更长的整数 | |
| 浮点型 | 单精度 | float |
4字节 | 单精度浮点数 |
| 双精度 | double |
8字节 | 双精度浮点数 | |
| 长双精度 | long double |
8或16字节 | 高精度浮点数 | |
| 字符型 | 字符型 | char |
1字节 | 存储单个字符 |
| 空类型 | 空类型 | void |
N/A | 无类型,用于函数返回值和参数 |
重要提示:数据类型的“大小”
需要特别注意的是,C语言标准只规定了各种类型大小的相对关系(sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)),但没有规定它们的绝对大小。int 在一些旧系统或嵌入式系统上可能是2字节,而在现代的64位操作系统上通常是4字节。
要准确知道在你的特定编译器和系统上某个类型的大小,可以使用 sizeof 运算符:
#include <stdio.h>
int main() {
printf("Size of char: %zu bytes\n", sizeof(char));
printf("Size of int: %zu bytes\n", sizeof(int));
printf("Size of float: %zu bytes\n", sizeof(float));
printf("Size of double: %zu bytes\n", sizeof(double));
printf("Size of long long: %zu bytes\n", sizeof(long long));
return 0;
}
%zu 是 size_t 类型的正确格式说明符,sizeof 运算符的结果就是 size_t 类型。
