我正在尝试将这个简单的 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;
其他行没有错误。
我读到 & 是获取变量的地址,但我如何存储地址?
最佳答案
将 m.p = &i;
更改为 m.p = &mut i as *mut _;
不过,更惯用的方式是这样的:
let mut m = n {
p: &mut i
};
除非必要,否则更惯用的做法是不使用原始指针。
struct N<'a> {
p: &'a mut int
}
关于rust - 结构中的类 C 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25549672/