如何创建一个使用整数指针并增加其值的“增量”函数?

Mat*_*ipe 2 pointers rust

教程中,给出了以下代码:

fn increment(r: &mut int) {
    *r = *r + 1;
}

fn main () {
    let mut x = ~10;
    increment(x);
}
Run Code Online (Sandbox Code Playgroud)

我知道此语法已过时,因此我自己移植了代码:

fn increment(r: &mut i32) {
    *r = *r + 1;
}

fn main() {
    let mut x = Box::new(10);
    increment(x);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,出现以下错误:

fn increment(r: &mut int) {
    *r = *r + 1;
}

fn main () {
    let mut x = ~10;
    increment(x);
}
Run Code Online (Sandbox Code Playgroud)

我尝试了许多与&组合的组合mut,等等。发挥这种功能的正确方法是什么?

Vla*_*eev 6

首先,您的教程已经过时了。有一本很棒的官方书

其次,除非确实需要,否则不应该使用盒子。也就是说,不要这样写:

let mut x = Box::new(10);
Run Code Online (Sandbox Code Playgroud)

写这个:

let mut x = 10;
Run Code Online (Sandbox Code Playgroud)

除非你真的知道为什么需要Box<i32>。简而言之,需要为以下三项提供框:递归类型,特征对象和非常大的结构传递。

第三,是的,正如AB所说,您需要使用&mut参考:

let mut x = 10;
increment(&mut x);
Run Code Online (Sandbox Code Playgroud)

这里不再需要取消引用,因为x不再是Box,它只是一个常规值。