MST

星途 面试题库

面试题:Rust中所有权机制下函数传参问题

在Rust中,假设有一个结构体`Person`,包含`name: String`和`age: u32`字段。编写一个函数`print_person`,它接收一个`Person`实例作为参数并打印其信息。请解释在调用该函数时,所有权是如何转移的?如果想在函数调用后,原`Person`实例仍然可用,应该如何修改代码?
42.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 编写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实例在函数调用后不再可用,因为所有权已转移到函数内部。

  1. 修改代码使原Person实例仍然可用: 可以通过传递引用的方式来实现,这样所有权不会发生转移。修改后的代码如下:
struct Person {
    name: String,
    age: u32,
}

fn print_person(person: &Person) {
    println!("Name: {}, Age: {}", person.name, person.age);
}

在这个版本中,print_person函数接收一个Person的引用&Person。这样在函数调用后,原Person实例的所有权仍然属于调用者,原实例仍然可用。