MST

星途 面试题库

面试题:Rust中引用与可变性在函数参数传递中的应用

假设有一个函数需要修改传入的结构体实例的某个字段,同时在函数内部可能会多次读取该结构体的其他字段。请用Rust代码实现这个函数,并说明如何正确使用引用与可变性来避免编译错误。结构体定义如下:`struct MyStruct { data1: i32, data2: String }`。
49.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
struct MyStruct {
    data1: i32,
    data2: String,
}

fn modify_struct_field(mut my_struct: &mut MyStruct) {
    // 读取其他字段
    let data1 = my_struct.data1;
    println!("Read data1: {}", data1);

    // 修改某个字段
    my_struct.data2.push_str(" modified");
}

在Rust中,要修改结构体实例的字段,需要使用可变引用。在函数签名中,mut my_struct: &mut MyStruct 表明 my_struct 是一个指向 MyStruct 实例的可变引用。

当函数内部需要读取结构体的其他字段时,由于 my_struct 已经是可变引用,所以可以直接读取。如果在读取字段之后再修改字段,是不会有编译错误的。但需要注意,Rust的借用规则不允许同时存在对同一数据的可变引用和不可变引用,以确保内存安全。在这个例子中,我们通过确保在修改字段之前读取所需的字段,从而避免了违反借用规则的情况。

使用该函数的示例:

fn main() {
    let mut my_struct = MyStruct {
        data1: 42,
        data2: "original".to_string(),
    };
    modify_struct_field(&mut my_struct);
    println!("Modified data2: {}", my_struct.data2);
}