结构

收藏994

阅读11133

更新时间2025-08-27

数组用于表示同构值的集合。 类似地,结构是 Rust 中可用的另一种用户定义的数据类型,它允许我们组合不同类型的数据项,包括另一种结构。 结构将数据定义为键值对。

语法 - 声明结构

struct关键字用于声明结构。 由于结构是静态类型的,因此结构中的每个字段都必须与数据类型相关联。 结构体的命名规则和约定类似于变量的命名规则和约定。 结构块必须以分号结尾。

struct Name_of_structure {
   field1:data_type,
   field2:data_type,
   field3:data_type
}

语法 - 初始化结构

声明结构后,应为每个字段分配一个值。 这称为初始化。

let instance_name = Name_of_structure {
   field1:value1,
   field2:value2,
   field3:value3
}; 
//注意分号
Syntax: Accessing values in a structure
Use the dot notation to access value of a specific field.
instance_name.field1
Illustration
struct Employee {
   name:String,
   company:String,
   age:u32
}
fn main() {
   let emp1 = Employee {
      company:String::from("TutorialsPoint"),
      name:String::from("Mohtashim"),
      age:50
   };
   println!("Name is :{} company is {} age is {}",emp1.name,emp1.company,emp1.age);
}

上面的示例声明了一个具有三个字段的 Employee 结构体:姓名、公司和年龄。 main() 初始化该结构。 它使用 println! 用于打印结构中定义的字段值的宏。

输出

Name is :Mohtashim company is TutorialsPoint age is 50

修改结构体实例

要修改实例,实例变量应标记为可变。 下面的示例声明并初始化一个名为 Employee 的结构,然后将 age 字段的值从 50 修改为 40。

let mut emp1 = Employee {
   company:String::from("TutorialsPoint"),
   name:String::from("Mohtashim"),
   age:50
};
emp1.age = 40;
println!("Name is :{} company is {} age is 
{}",emp1.name,emp1.company,emp1.age);

输出

Name is :Mohtashim company is TutorialsPoint age is 40

将结构传递给函数

以下示例显示如何将结构实例作为参数传递。 display 方法将 Employee 实例作为参数并打印详细信息。

fn display( emp:Employee) {
   println!("Name is :{} company is {} age is 
   {}",emp.name,emp.company,emp.age);
}

这是完整的程序 −

//声明一个结构体
struct Employee {
   name:String,
   company:String,
   age:u32
}
fn main() {
   //初始化一个结构体
   let emp1 = Employee {
      company:String::from("TutorialsPoint"),
      name:String::from("Mohtashim"),
      age:50
   };
   let emp2 = Employee{
      company:String::from("TutorialsPoint"),
      name:String::from("Kannan"),
      age:32
   };
   //将 emp1 和 emp2 传递给 display()
   display(emp1);
   display(emp2);
}
// 使用以下方法获取特定结构体字段的值
// 运算符并将其打印到控制台
fn display( emp:Employee){
   println!("Name is :{} company is {} age is 
   {}",emp.name,emp.company,emp.age);
}

输出

Name is :Mohtashim company is TutorialsPoint age is 50
Name is :Kannan company is TutorialsPoint age is 32

从函数返回结构体

让我们考虑一个函数who_is_elder(),它比较两个员工的年龄并返回年长的那个。

fn who_is_elder (emp1:Employee,emp2:Employee)->Employee {
   if emp1.age>emp2.age {
      return emp1;
   } else {
      return emp2;
   }
}

这是完整的程序 −

fn main() {
   //初始化结构
   let emp1 = Employee{
      company:String::from("TutorialsPoint"),
      name:String::from("Mohtashim"),
      age:50
   };
   let emp2 = Employee {
      company:String::from("TutorialsPoint"),
      name:String::from("Kannan"),
      age:32
   };
   let elder = who_is_elder(emp1,emp2);
   println!("elder is:");

   //打印年长员工的详细信息
   display(elder);
}
//接受员工结构实例并比较他们的年龄
fn who_is_elder (emp1:Employee,emp2:Employee)->Employee {
   if emp1.age>emp2.age {
      return emp1;
   } else {
      return emp2;
   }
}
//显示员工的姓名、公司和年龄
fn display( emp:Employee) {
   println!("Name is :{} company is {} age is {}",emp.name,emp.company,emp.age);
}
//声明一个结构体
struct Employee {
   name:String,
   company:String,
   age:u32
}

输出

elder is:
Name is :Mohtashim company is TutorialsPoint age is 50

结构中的方法

方法就像函数。 它们是一组逻辑编程指令。 方法是用 fn 关键字声明的。 方法的范围在结构块内。

方法在结构块之外声明。 impl 关键字用于在结构上下文中定义方法。 方法的第一个参数始终是 self,它表示结构的调用实例。 方法对结构的数据成员进行操作。

要调用方法,我们需要首先实例化结构。 可以使用结构的实例来调用该方法。

语法

struct My_struct {}
impl My_struct { 
   //设置方法的上下文
   fn method_name() { 
      //定义一个方法
   }
}

示例

下面的示例定义了一个带有字段的结构Rectanglewidthheight。方法area是在结构的上下文中定义的。 area 方法通过 self 关键字访问结构体的字段并计算矩形的面积。

//定义矩形的尺寸
struct Rectangle {
   width:u32, height:u32
}

//计算矩形面积的逻辑
impl Rectangle {
   fn area(&self)->u32 {
      //使用 . 运算符通过 self 关键字获取字段的值
      self.width * self.height
   }
}

fn main() {
   //实例化结构
   let small = Rectangle {
      width:10,
      height:20
   };
   //打印矩形的面积
   println!("width is {} height is {} area of Rectangle 
   is {}",small.width,small.height,small.area());
}

输出

width is 10 height is 20 area of Rectangle is 200

结构体中的静态方法

静态方法可以用作实用方法。 这些方法甚至在结构实例化之前就存在。 静态方法是使用结构名称调用的,并且无需实例即可访问。 与普通方法不同,静态方法不会采用 &self 参数。

语法 - 声明静态方法

像函数和其他方法这样的静态方法可以选择包含参数。

impl Structure_Name {
   //创建 Point 结构对象的静态方法
   fn method_name(param1: datatype, param2: datatype) -> return_type {
      // 逻辑在这里
   }
}

语法 - 调用静态方法

structure_name :: 语法用于访问静态方法。

structure_name::method_name(v1,v2)

示例

以下示例使用 getInstance 方法作为工厂类,用于创建并返回结构 Point 的实例。

//声明一个结构体
struct Point {
   x: i32,
   y: i32,
}
impl Point {
   //创建 Point 结构对象的静态方法
   fn getInstance(x: i32, y: i32) -> Point {
      Point { x: x, y: y }
   }
   //显示结构体字段的值
   fn display(&self){
      println!("x ={} y={}",self.x,self.y );
   }
}
fn main(){
   //调用静态方法
   let p1 = Point::getInstance(10,20);
   p1.display();
}

输出

x =10 y=20

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号