我正在尝试将这个简单的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;是获取变量的地址,但如何存储地址?
答案 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
}