Logo
Section 1 / 7

结构体简介

本课程带你了解结构体的基本知识。

检查点

结构体简介

本课程带你了解结构体的基本知识。

什么是结构体?

结构体由相关联的项组成,这些项可能具有不同的数据类型。

结构体在这方面类似于元组。然而,与元组不同的是,你必须在结构体中为每个项明确指定数据类型。

结构体有助于创建自定义数据类型。

让我们看一个现实生活中的例子。 你知道矩形有两个测量值:宽度和高度。假设你有多个矩形,并且可以给它们命名。一旦你在结构体中声明了矩形的各个项目,就可以根据矩形的类型来初始化其值。 假设矩形的尺寸会随着颜色的不同而变化。

...

声明结构体

使用 struct 关键字后跟结构体名称,再用大括号包围结构体的内容来声明结构体。
在大括号内部,结构体的各个项以 键: 值 的形式定义,其中键是结构体的字段名,值是该字段的数据类型。

注意: 结构体可以在任何位置声明,无论是在使用它的函数之前还是之后都可以。

...
定义结构体

命名规范:

结构体名称应采用 帕斯卡命名法(PascalCase),即复合词中每个单词的首字母都大写。

如果未遵循此规则,编译器将发出警告 ⚠️。

初始化结构体

仅声明结构体只是定义了一个自定义数据类型的蓝图,此时并未在内存中创建实际的对象。只有当创建该类型的变量时,才会真正实例化对象。

...
初始化结构体

注意: 为字段赋值时,顺序无关紧要。

访问结构体中的值

要访问结构体中的某个值,只需写出结构体名称,后接 . 操作符,再写出要访问的字段名称。

...
访问值

注意: 结构体实例默认是不可变的,因此无法修改,除非显式声明为可变。但其值仍然可以被访问。

更新结构体实例

通过在 let 后添加 mut 关键字来声明结构体实例为可变,即可使其变为可变。这样就可以使用点操作符访问任意字段,并更新其值。

...
更新结构体

示例

以下示例创建了一个名为 Course 的结构体,并定义了三个字段:课程名称、课程级别和课程代码。

1// 声明一个结构体 2struct Course { 3 code: i32, 4 name: String, 5 level: String, 6} 7 8fn main() { 9 // 初始化 10 let mut course1 = Course { 11 name: String::from("Rust"), 12 level: String::from("beginner"), 13 code: 130, 14 }; 15 let course2 = Course { 16 name: String::from("Javascript"), 17 level: String::from("beginner"), 18 code: 122, 19 }; 20 // 访问 21 println!("Name: {}, Level: {}, code: {}", course1.name, course1.level, course1.code); 22 println!("Name: {}, Level: {}, code: {}", course2.name, course2.level, course2.code); 23 // 更新 24 course1.name = "Java".to_string(); 25 course1.code = 134; 26 println!("Name: {}, Level: {}, code: {}", course1.name, course1.level, course1.code); 27}

说明

  • main 函数

    从 第 8 行到第 27 行 定义了 main 函数。

    • 第 10 行到第 14 行 创建了一个可变的 mut 实例 course1,类型为 Course。
    • 第 15 行到第 19 行 创建了一个不可变的实例 course2,类型也为 Course。
    • 第 21 行和第 22 行 使用点操作符打印出 course1 和 course2 的值。
    • 由于 course1 是可变的,因此可以在 第 24 行和第 25 行 更新其 name 和 code 字段的值。
    • 更新后的结果在 第 26 行 输出。
  • struct

    在 第 2 行 声明了一个名为 Course 的结构体。在结构体体内,定义了三个字段:code(类型为 i32)、name(类型为 String)、level(类型为 String)。

下图解释了上述代码:

测验

测试你对结构体基础知识的理解。


现在你已经学习了 Rust 中结构体的基础知识,接下来请进入下一课:“函数与结构体”。

Quiz

单选题

结构体的值可以通过以下方式访问:

1 / 2

Rust 向量

函数和结构体