结构中的C状指针

时间:2014-08-28 13:11:45

标签: rust

我正在尝试将这个简单的C代码转换为Rust:

#include <stdio.h>

struct n {
        int *p;
};

int main(void) {
    int i = 8;
    struct n m;

    m.p = &i;

    printf("%d ", i);
    printf("%d", *(m.p));

    return 0;
}

输出为“8 8”。

我不需要垃圾收集或其他类型的指针。

我试过这个:

struct n {
    p: *mut int
}

fn main() {
    let mut i: int = 8;
    let mut m: n;

    m.p = &i;

    println!("{} ", i);
    println!("{}", *(m.p));
}

但我明白了:

error: mismatched types: expected `*mut int`, found `&int` (expected *-ptr, found &-ptr).

与此错误有关:

m.p = &i;

其他行没有错误。

我读到了&amp;是获取变量的地址,但如何存储地址?

1 个答案:

答案 0 :(得分:1)

m.p = &i;更改为m.p = &mut i as *mut _;

更为惯用的方式是:

let mut m = n {
    p: &mut i
};

除非必要,否则更多的惯用语就是不使用原始指针。

struct N<'a> {
    p: &'a mut int
}