03 · 数据类型与变量

2026.09.27 · 🟡 中

还

基本类型与常见字节数(和平台有关,用 sizeof 实测)

类型 典型大小 说明
char 1 字符 / 小整数
short 2 短整型
int 4 最常用整型
long 4 或 8 平台相关
long long 8 长整型
float 4 单精度(注意 ~6-7 位有效数字)
double 8 双精度,默认浮点类型
void — 无类型
printf("%zu\n", sizeof(int));   // 查看占用字节数

声明与初始化(和 Java 最大的差异点)

int count = 0;          // 局部变量
float price = 9.99;
char grade = 'A';

int x;                  // ❌ 未初始化的局部变量 = 垃圾值(不确定值)
  • 局部变量不初始化就是垃圾值(Java 会默认给 0,C 不会!)
  • 全局变量和 static 变量会被自动初始化为 0。
  • C89 要求变量声明必须在代码块最开头(C99 起允许随用随声明)。

类型转换(隐式 vs 显式)

int a = 5, b = 2;
double r = a / b;            // ❌ = 2.0,整数除法先算完再转换
double ok = (double)a / b;   // ✅ = 2.5

详见 17-类型转换与错误处理。

有符号 / 无符号

unsigned int u = 10;   // 只能表示非负,范围更大
signed int   s = -10;  // 默认就是 signed

⚠️ 有符号与无符号混用比较是经典坑,unsigned 会「吃掉」负数。

⚡ Java 对比

  • Java 的 int 永远 32 位;C 的 int 大小由平台决定(用 <stdint.h> 的 int32_t 才保险)。
  • Java 有自动装箱、Integer 对象;C 只有原始类型,没有包装类。
  • Java 的 String 是对象;C 只有 char 数组(见 11-字符串)。

关联

04-常量与存储类 · 17-类型转换与错误处理 · Java与C核心差异