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