【Rust】结构体定义域实例化

embedded/2025/1/14 14:35:31/

目录

思维导图

1. 结构体的定义与实例化

1.1 结构体的基本概念

1.2 定义结构体

1.3 创建结构体实例

1.4 结构体的定义与实例化示例 

2. 访问与修改结构体字段

2.1 访问字段

2.2 修改字段

3. 结构体实例的构造函数

3.1 构造函数的定义

3.2 使用字段初始化简写

4. 结构体更新语法

4.1 更新语法的使用

5. 元组结构体

5.1 元组结构体的定义

6. 单元结构体

6.1 单元结构体的定义

7. 结构体数据的所有权

7.1 数据所有权的重要性


思维导图

1. 结构体的定义与实例化

1.1 结构体的基本概念

  • 结构体是一种自定义数据类型,允许将多个相关的值组合在一起,形成一个有意义的集合。与元组不同,结构体的每个字段都有名称,这使得数据的访问和操作更加直观和清晰。

  • 结构体的灵活性体现在其命名字段上,开发者无需依赖字段的顺序来访问数据,从而减少了错误的可能性。

1.2 定义结构体

  • 使用struct关键字定义结构体,并为其命名。结构体名称应具有描述性,能够清晰地表达其代表的含义。

  • 在大括号内定义字段的名称和类型。字段的类型可以是Rust中的任意数据类型,包括基本类型、复合类型或其他结构体。例如:
    rust">struct User {active: bool,username: String,email: String,sign_in_count: u64,
    }
    

1.3 创建结构体实例

  • 创建结构体实例时,需要为每个字段指定具体值,可以不按照定义时的顺序。例如:
    rust">let user1 = User {active: true,username: String::from("someusername123"),[5]email: String::from("someone@example.com"),[5][6]sign_in_count: 1,
    };
    

1.4 结构体的定义与实例化示例 

rust">struct User {active: bool,username: String,email: String,sign_in_count: u64,
}fn main() {// 创建结构体实例let user1 = User {active: true,username: String::from("someusername123"),email: String::from("someone@example.com"),sign_in_count: 1,};// 访问字段println!("User1: {}, {}, ({}), {}",user1.active, user1.username, user1.email, user1.sign_in_count);
}

2. 访问与修改结构体字段

2.1 访问字段

  • 使用点表示法(.)访问结构体实例的字段。例如,user1.email可以获取用户的电子邮件地址。

2.2 修改字段

  • 如果结构体实例是可变的(即使用mut关键字声明),可以通过点表示法修改字段的值。例如:
    rust">struct User {active: bool,username: String,email: String,sign_in_count: u64,
    }fn main() {// 创建可变结构体实例let mut  user1 = User {active: true,username: String::from("someusername123"),email: String::from("someone@example.com"),sign_in_count: 1,};//修改字段user1.email = String::from("anotheremail@example.com");// 访问字段println!("updated User1: {}, {}, ({}), {}",user1.active, user1.username, user1.email, user1.sign_in_count);
    }

3. 结构体实例的构造函数

3.1 构造函数的定义

  • 可以定义一个函数来返回结构体实例,这种函数通常称为构造函数。例如,以下build_user函数用于创建User实例:
    rust">struct User {active: bool,username: String,email: String,sign_in_count: u64,
    }fn main() {// 定义构造函数fn build_user(email: String, username: String) -> User {User {active: true,username,email,sign_in_count: 1,}}// 使用构造函数创建实例let user1 = build_user(String::from("someone@example.com"),String::from("someusername123"),);// 访问字段println!("User1: {}, {}, ({}), {}",user1.active, user1.username, user1.email, user1.sign_in_count);
    }

3.2 使用字段初始化简写

  • 当函数参数与结构体字段同名时,可以使用字段初始化简写语法,避免重复代码。例如,username: username可以简写为username

4. 结构体更新语法

4.1 更新语法的使用

  • 结构体更新语法允许基于现有实例创建新实例,同时仅修改部分字段。例如:
    rust">let user2 = User {email: String::from("another@example.com"),[5]..user1
    };
    
  • 在上述代码中,user2继承了user1的所有字段值,但email字段被更新为新值。

5. 元组结构体

5.1 元组结构体的定义

  • 元组结构体是一种特殊的结构体,它没有命名字段,仅有字段类型。元组结构体适用于需要为整个元组命名的场景。例如:
    rust">struct Color(i32, i32, i32);[10]
    struct Point(i32, i32, i32);[10]
    
  • 元组结构体的实例可以通过索引访问字段,例如let black = Color(0, 0, 0);

6. 单元结构体

6.1 单元结构体的定义

  • 单元结构体是一种没有字段的结构体,类似于单元类型()。它通常用于实现某些特征(trait)而不需要存储数据。例如:
    rust">struct AlwaysEqual;fn main() {let subject = AlwaysEqual;
    }

7. 结构体数据的所有权

7.1 数据所有权的重要性

  • 在结构体中使用拥有所有权的类型(如String)而非引用类型(如&str),可以确保每个结构体实例拥有其数据的所有权,从而避免生命周期管理的复杂性。

  • 如果需要在结构体中使用引用类型,则必须显式指定生命周期参数,以确保引用的有效性。这将在后续章节中详细讨论。


http://www.ppmy.cn/embedded/153860.html

相关文章

[免费]SpringBoot+Vue新能源汽车充电桩管理系统【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue新能源汽车充电桩管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue新能源汽车充电桩管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息化时代的到来&#xff0…

相机小孔成像模型与透视变换

0 背景 本文用于记录小孔相机成像的数学模型推导,并讨论特定条件下两个相机之间看到图像的变换关系。 1 小孔成像模型 小孔成像模型如上图所示。物理世界发光点P,经过小孔O投影到物理成像平面,形成像点I’。 简易起见,构造虚拟成…

leetcode39.组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果…

Debian之Maven安装

本地压缩包安装(推荐) 下载地址:https://maven.apache.org/download.cgi # 将安装包移动到当前目录 cd /usr/local # && mkdir maven && cd maven # 在线下载(https://dlcdn.apache.org/maven/) wg…

【pycharm】远程部署失败,查看日志

pycharm 远程部署失败,查看日志 远程一直失败,gateway超时会还知道拉取一份日志: 在./root 下 发现了崩溃日志,启动崩溃了,导致backend一直无法启动。win11就是一直在connect到ubuntu的后端pycharm。。gateway 拉取的日志 我上传的linux版本的pycharm暂时存在dist目录下,…

【Git】分支管理

git 分支管理 在 Git 中,分支合并是一个常见的操作,用于将一个分支的更改集成到另一个分支中。合并后会生成一个新的提交记录,这个过程可以通过多种方式实现。下面详细介绍几种常用的合并方法及其命令。 1. 快进合并 (Fast-Forward Merge) …

麦田物语学习笔记:实现根据物品详情显示

基本流程 1.代码思路 (1)新建ItemTooltip.cs用于控制ItemTooltip(这个是在Hierarchy里的)中的文本内容 回顾一下:对于物品描述(ItemTooltip)的UI有三个部分,第一部分是名字和类型,第二部分是物品详解,第三部分是金币图标以及价值的文本 (2)获取UI中的所有部分,因为item分为可出…

在 Alpine Linux 下通过 Docker 部署 PostgreSQL 服务器

简要介绍 Docker 是一个开源的容器化平台,它使得开发者能够轻松创建、部署和运行应用程序。通过使用 Docker,程序员可以把应用及其所有依赖打包在一个轻量级的容器中,这样可以确保在不同环境中的一致性。PostgreSQL(简称 psql&am…