## 高级函数与闭包 > [ch19-05-advanced-functions-and-closures.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch19-05-advanced-functions-and-closures.md) >
> commit d06a6a181fd61704cbf7feb55bc61d518c6469f9 最后让我们讨论一些有关函数和闭包的高级功能:函数指针、发散函数和返回值闭包。 ### 函数指针 我们讨论过了如何向函数传递闭包,不过也可以向函数传递常规的函数!函数的类型是 `fn`,使用小写的 “f” 以便不与 `Fn` 闭包 trait 向混淆。`fn` 被称为**函数指针**(*function pointer*)。指定参数为函数指针的语法类似于闭包,如列表 19-34 所示: 文件名: src/main.rs ```rust fn add_one(x: i32) -> i32 { x + 1 } fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { f(arg) + f(arg) } fn main() { let answer = do_twice(add_one, 5); println!("The answer is: {}", answer); } ``` 列表 19-34:使用 `fn` 类型接受函数指针作为参数 这会打印出 `The answer is: 12`。