Learn
Rust/03-basic-types

基础数据类型

Rust 的类型分为**标量(scalar)与复合(compound)**两大类。它们都在栈上分配,大小已知。

1. 标量类型

1.1 整型

有符号 i8/i16/i32/i64/i128/isize 与无符号 u8/u16/u32/u64/u128/usize。默认整型是 i32。

let a: i32 = -100;
let b: u8 = 255;       // 范围 0..=255
let c = 50;            // 推断为 i32
let size: usize = 10;  // 用于索引/长度
⚠️整型溢出

Debug 模式下溢出会 panic;Release 模式会按补码回绕(如 u8 的 256 变 0)。务必用 checked_add 等安全方法处理可能溢出的情况。

1.2 浮点

仅 f32 与 f64(默认 f64)。

let x = 2.0;    // f64
let y: f32 = 3.14;

1.3 布尔与字符

let flag = true;          // bool
let letter = 'A';         // char,占 4 字节,是 Unicode 标量值
let emoji = '😊';         // char 可存任意 Unicode 字符
ℹ️char 不是 u8

char 是 4 字节的 Unicode 标量值,能表示中文、emoji 等;而字符串才是 UTF-8 字节序列,二者不要混用。

2. 复合类型

2.1 元组(tuple)

固定长度、可异类型的组合:

元组
fn main() {
    let tup: (i32, f64, char) = (500, 6.4, 'z');
    let (a, b, c) = tup;       // 解构
    println!("{} {} {}", a, b, c);
    println!("第一个 = {}", tup.0);  // 用 .索引 访问
}

2.2 数组(array)

同类型、固定长度,栈上连续存储:

数组
fn main() {
    let arr = [1, 2, 3, 4, 5];
    let same = [0; 3];         // [0, 0, 0]
    println!("长度 = {}", arr.len());
    println!("第二个 = {}", arr[1]);
    println!("same = {:?}", same);
}
⚠️越界访问会 panic

用越界下标 arr[99] 访问数组,运行时会触发 panic 并安全退出,不会像 C 那样读到脏内存。这正是 Rust 安全性的体现。

3. 类型速查

类别类型默认
有符号整型i8..i128, isizei32
无符号整型u8..u128, usizeu32(上下文)
浮点f32, f64f64
元组/数组不定—
🎯练习

定义一个元组 (String, i32, bool) 存放「姓名、年龄、是否会员」,解构后打印;再定义一个长度为 4 的数组存放四个季度销售额,用循环求和。

小结

  • 标量:整型(含 usize)、浮点、布尔、字符(Unicode)
  • 复合:元组(异类型、.0 访问)、数组(同类型、固定长)
  • 默认整型 i32、浮点 f64
  • 越界访问会安全 panic,不会内存越界
  • 下一章讲控制流与函数 →