返回介绍

7.7.1 转换

发布于 2024-10-13 11:25:30 字数 922 浏览 0 评论 0 收藏 0

安全转换指针类型,但目标读写操作仍须 unsafe 担保。

  • 不同类型指针间转换。
  • 指针转换为整数。
  • 整数转换为指针。
  • 数组引用转换为指针。
  • 函数指针转换为其他指针。
  • 函数指针转换为整数。
fn main() {
  let x = 100;
  let p: *const i32 = &x;

  let p2 = p as *const i16;      // ptr   -> ptr
  let addr = p as usize;       // ptr   -> usize
  let p3 = addr as *const i32;     // usize -> ptr

  println!("{:p}, {:x}", p2, addr);
  assert_eq!(p, p3);
}
fn main() {
  let d = [10, 11, 12, 13, 14];

  let p1 = &d as *const i32;     // &array   -> ptr
  let p2 = &d[2] as *const i32;  // &element -> ptr

  unsafe {
    assert_eq!(10, *p1);
    assert_eq!(12, *p2);
  }
}
fn test() {
  println!("hello, world!");
}

fn main() {
  let p = test as *const usize;   // fn -> void_ptr
  let x = test as usize;      // fn -> usize

  println!("{:p}, {:x}", p, x);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文