面试题答案
一键面试- 编写
print_person
函数并说明所有权转移:
struct Person {
name: String,
age: u32,
}
fn print_person(person: Person) {
println!("Name: {}, Age: {}", person.name, person.age);
}
在调用print_person
函数时,所有权发生转移。当我们将Person
实例作为参数传递给print_person
函数时,person
参数获取了该实例的所有权。这意味着原Person
实例在函数调用后不再可用,因为所有权已转移到函数内部。
- 修改代码使原
Person
实例仍然可用: 可以通过传递引用的方式来实现,这样所有权不会发生转移。修改后的代码如下:
struct Person {
name: String,
age: u32,
}
fn print_person(person: &Person) {
println!("Name: {}, Age: {}", person.name, person.age);
}
在这个版本中,print_person
函数接收一个Person
的引用&Person
。这样在函数调用后,原Person
实例的所有权仍然属于调用者,原实例仍然可用。