长安的 Rust 入门教程长安的 Rust 入门教程
首页
基础教程
进阶内容
Rust 官网
编程指南
首页
基础教程
进阶内容
Rust 官网
编程指南
  • 基础教程

    • 📚 基础教程
    • 第1章 - 认识 Rust
    • 第2章 - 安装 Rust
    • 第3章 - Hello World
    • 第4章 - 变量与可变性
    • 第5章 - 数据类型
    • /guide/06-functions.html
    • 第7章 - 控制流
    • 第8章 - 所有权
    • 第9章 - 引用与借用
    • 第10章 - 结构体
    • 第11章 - 枚举
    • 第12章 - 模式匹配
    • 第13章 - 错误处理
    • 第14章 - 集合类型
    • 第15章 - 模块系统
  • 实战项目

    • 第16章 - 实战项目:猜数字游戏
    • 第17章 - 实战项目:待办事项 CLI
    • 第18章 - 实战项目:简单 HTTP 服务器

第5章 - 数据类型

嗨,朋友!我是长安。

上一章我们学习了变量,现在让我们看看变量可以存储什么类型的数据。

Rust 是一门静态类型语言,这意味着编译器在编译时就需要知道所有变量的类型。不过大多数时候,Rust 可以自动推断类型,你不需要显式标注。

🔢 标量类型

标量类型表示单个值。Rust 有四种主要的标量类型:整数、浮点数、布尔值和字符。

整数类型

整数就是没有小数部分的数字。

fn main() {
    let age: i32 = 25;           // 有符号 32 位整数
    let count: u32 = 100;        // 无符号 32 位整数
    let big_number: i64 = 1_000_000;  // 可以用下划线分隔,增加可读性
    
    println!("年龄: {}", age);
    println!("数量: {}", count);
    println!("大数: {}", big_number);
}

整数类型一览表:

长度有符号无符号
8位i8u8
16位i16u16
32位i32u32
64位i64u64
128位i128u128
archisizeusize
  • 有符号(i 开头):可以是正数或负数
  • 无符号(u 开头):只能是正数
  • isize/usize:取决于你的计算机架构(32 位系统是 32 位,64 位系统是 64 位)

长安说

不知道用哪种?默认用 i32,这是最常用的,性能也很好。需要存储列表索引时用 usize。

浮点数类型

浮点数就是有小数点的数字。

fn main() {
    let pi: f64 = 3.14159;       // 64 位浮点数(默认)
    let x: f32 = 2.0;            // 32 位浮点数
    
    println!("π ≈ {}", pi);
    println!("x = {}", x);
}

Rust 有两种浮点类型:

  • f32:32 位,单精度
  • f64:64 位,双精度(默认,精度更高)

布尔类型

布尔值只有两个可能:true 或 false。

fn main() {
    let is_sunny: bool = true;
    let is_raining = false;      // 类型推断为 bool
    
    println!("今天晴天吗? {}", is_sunny);
    println!("在下雨吗? {}", is_raining);
}

字符类型

字符类型用单引号表示,可以表示任何 Unicode 字符。

fn main() {
    let letter: char = 'A';
    let heart = '❤';
    let chinese = '中';
    
    println!("字母: {}", letter);
    println!("爱心: {}", heart);
    println!("汉字: {}", chinese);
}

注意

  • 字符用单引号 'A'
  • 字符串用双引号 "Hello"
  • char 类型占 4 个字节,可以表示任何 Unicode 字符

📦 复合类型

复合类型可以将多个值组合成一个类型。

元组(Tuple)

元组可以把不同类型的值组合在一起。

fn main() {
    let person: (&str, i32, f64) = ("长安", 25, 1.75);
    
    println!("姓名: {}", person.0);
    println!("年龄: {}", person.1);
    println!("身高: {}米", person.2);
    
    // 解构元组
    let (name, age, height) = person;
    println!("{} 今年 {} 岁,身高 {} 米", name, age, height);
}

数组(Array)

数组中所有元素必须是相同类型,且长度固定。

fn main() {
    let numbers: [i32; 5] = [1, 2, 3, 4, 5];
    let months = ["一月", "二月", "三月"];
    
    println!("第一个数字: {}", numbers[0]);
    println!("第三个月: {}", months[2]);
    
    // 创建包含 5 个 0 的数组
    let zeros = [0; 5];  // [0, 0, 0, 0, 0]
    println!("零数组: {:?}", zeros);
}

💡 小结

  • 标量类型:整数(i32/u32)、浮点数(f32/f64)、布尔值(bool)、字符(char)
  • 复合类型:元组(tuple)、数组(array)
  • Rust 可以自动推断类型,但你也可以显式标注
  • 使用 {} 打印单个值,{:?} 打印复合类型(调试格式)

🚀 下一步

第6章 - 函数 →

💪 练习题

  1. 声明一个 i64 类型的变量存储你的出生年份
  2. 创建一个元组存储你的个人信息(姓名、年龄、身高)
  3. 创建一个包含一周七天名称的数组
  4. 打印数组的第一个和最后一个元素
答案示例
fn main() {
    // 练习1
    let birth_year: i64 = 1998;
    println!("出生年份: {}", birth_year);
    
    // 练习2
    let my_info = ("长安", 25, 1.75);
    println!("信息: {:?}", my_info);
    
    // 练习3
    let weekdays = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"];
    
    // 练习4
    println!("第一天: {}", weekdays[0]);
    println!("最后一天: {}", weekdays[6]);
}
最近更新: 2025/12/26 18:01
Contributors: 王长安
Prev
第4章 - 变量与可变性
Next
/guide/06-functions.html