MST
星途 面试题库

面试题:Rust中如何正确结合引用与函数指针

请编写一段Rust代码,展示如何将引用作为参数传递给一个接收函数指针的函数,并详细解释代码的工作原理。假设函数指针类型为`fn(&i32) -> i32`。
49.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义一个接收函数指针的函数,该函数指针接收一个i32的引用并返回i32
fn call_with_ref(func: fn(&i32) -> i32, num_ref: &i32) -> i32 {
    func(num_ref)
}

// 定义一个简单的函数,接收i32的引用并返回其值的两倍
fn double(num: &i32) -> i32 {
    *num * 2
}

fn main() {
    let number = 5;
    // 将引用和函数指针传递给call_with_ref函数
    let result = call_with_ref(double, &number);
    println!("The result is: {}", result);
}

代码工作原理解释

  1. 定义call_with_ref函数
    • call_with_ref函数接收两个参数,一个是函数指针func,其类型为fn(&i32) -> i32,表示该函数接收一个i32的引用并返回一个i32
    • 另一个参数是num_ref,类型为&i32,即i32的引用。
    • 函数体中直接调用传入的函数指针func,并将num_ref作为参数传递给它,然后返回函数指针调用的结果。
  2. 定义double函数
    • double函数接收一个i32的引用num
    • 使用解引用运算符*获取引用指向的值,并将其乘以2后返回。
  3. main函数
    • 定义一个局部变量number并初始化为5。
    • 调用call_with_ref函数,将double函数指针和number的引用&number作为参数传递进去。
    • 调用的结果被赋值给result,并通过println!宏打印出来。最终输出The result is: 10,因为5的两倍是10