数据类型
翻译整理自 cppreference - 类型。
1. 基本类型
| 类型 | 典型大小 | 范围 |
|---|---|---|
char |
1 byte | -128 |
signed char |
1 byte | -128~127 |
unsigned char |
1 byte | 0~255 |
short |
≥ 2 byte | -32768~32767 |
unsigned short |
≥ 2 byte | 0~65535 |
int |
≥ 2 byte(通常 4) | -2³¹~2³¹-1 |
unsigned int |
同上 | 0~2³²-1 |
long |
≥ 4 byte | -2³¹~2³¹-1 |
long long (C99) |
≥ 8 byte | -2⁶³~2⁶³-1 |
float |
4 byte | ±3.4×10³⁸ |
double |
8 byte | ±1.7×10³⁰⁸ |
long double |
8~16 byte | 更高精度 |
_Bool (C99) |
1 byte | 0 或 1 |
可用 sizeof 查看大小:
printf("int=%zu\n", sizeof(int));可用 <stdint.h> 获得定长类型:
#include <stdint.h>
int32_t a;
uint64_t b;2. 字符类型
char c = 'A';
printf("%c %d\n", c, c); // A 65
C 中 char 既是字符也是小整数。
3. 浮点
float f = 3.14f;
double d = 3.14; // 默认 double
1.0 / 3.0 // 0.333333
科学计数:
double x = 1.5e3; // 1500.0
double y = 1.5e-3; // 0.0015
4. void
void 表示"无类型":
- 函数无返回值:
void f(void); - 通用指针:
void *p;
5. 枚举 enum
enum Color { RED, GREEN, BLUE };
enum Color c = GREEN;
printf("%d\n", c); // 1
可指定值:
enum Status {
OK = 200,
NotFound = 404,
ServerError = 500
};6. 类型限定符
| 限定符 | 含义 |
|---|---|
const |
只读 |
volatile |
阻止编译器优化(用于硬件寄存器、信号) |
restrict (C99) |
指针不重叠,可优化 |
_Atomic (C11) |
原子类型 |
const int MAX = 100;
volatile int *hw_reg = (int *)0x40021000;7. 类型转换
隐式转换
int i = 3;
double d = i; // int → double,安全
int j = 3.7; // double → int,截断为 3
显式转换(cast)
double pi = 3.14;
int truncated = (int)pi; // 3
8. typedef 别名
typedef unsigned long size_t;
typedef int (*cmp_t)(const void *, const void *);
size_t n = 100;9. sizeof
sizeof 返回类型大小(编译期常量):
printf("%zu\n", sizeof(int[10])); // 40
注意:对数组名取 sizeof 得到整个数组大小,对指针取 sizeof 只得到指针大小。
小结
掌握类型与限定符后,你可以写出更安全的 C 代码。下一章学习运算符。