面试题答案
一键面试以下是使用Rust语言实现的代码示例:
struct Person {
name: String,
age: i32,
}
fn modify_name(person: &mut Person) -> Person {
person.name = String::from("New Name");
// 这里因为函数返回值是Person类型,所以所有权从借用转移到函数返回值
// 函数结束时,person的所有权被返回,调用者获得其所有权
// 可变引用允许在函数内部修改结构体的字段
// 引用的作用是在不转移所有权的情况下,让函数能够访问和修改外部传入的结构体
// 当函数返回后,调用者可以继续使用这个结构体
std::mem::replace(person, Person { name: String::new(), age: 0 })
}
在这个函数中:
- 所有权:函数接收
Person
结构体的可变引用&mut Person
,因此在函数内部,Person
结构体的所有权仍归调用者所有。当函数返回时,通过std::mem::replace
将修改后的Person
结构体返回,此时所有权转移到函数的返回值,调用者接收返回值后重新获得所有权。 - 引用的作用:可变引用
&mut Person
允许函数修改传入的Person
结构体的字段,同时避免了不必要的所有权转移,使得在函数执行期间,调用者和函数可以共享对Person
结构体的访问,并且函数能够对其进行修改。