rust - 结构中的类 C 指针

标签 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;

其他行没有错误。

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

最佳答案

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/

相关文章:

rust - 无法根据文档示例打开文件

function - 可以声明将在 Rust 中对未使用的结果发出警告的函数吗?

rust - 链接到具有 extern "C"函数的 C++ 库

recursion - 二叉搜索树的递归中序遍历

c - 将字符串从 Rust 传递到 C 会导致段错误或错误

rust - 当值包含键和值之间的分隔符或对之间的分隔符时,如何从字符串中提取键和值?

rust - 如何使用 Rust 中的 Termion 获取键盘输入?

concurrency - Go 的 range time.Tick 相当于什么?

enums - 如何访问枚举变体未命名字段?

rust - 为什么 Rust 的 assert_eq!使用匹配实现?