當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust addr_of用法及代碼示例


本文簡要介紹rust語言中 Macro std::ptr::addr_of 的用法。

用法

pub macro addr_of($place : expr) {
    ...
}

創建指向位置的const 原始指針,而不創建中間引用。

創建參考&/&mut僅當指針正確對齊並指向初始化數據時才允許。對於不滿足這些要求的情況,應使用原始指針。然而,&expr as *const _在將其轉換為原始指針之前創建一個引用,並且該引用與所有其他引用遵循相同的規則。該宏可以創建一個原始指針沒有首先創建一個參考。

但是請注意,addr_of!(expr) 中的expr 仍然遵守所有常規規則。特別是,addr_of!(*ptr::null()) 是未定義行為,因為它取消引用空指針。

示例

use std::ptr;

#[repr(packed)]
struct Packed {
    f1: u8,
    f2: u16,
}

let packed = Packed { f1: 1, f2: 2 };
// `&packed.f2` would create an unaligned reference, and thus be Undefined Behavior!
let raw_f2 = ptr::addr_of!(packed.f2);
assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);

有關如何創建指向未初始化數據的指針,請參閱 addr_of_mut 。使用addr_of 這樣做沒有多大意義,因為隻能讀取數據,這將是未定義的行為。

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Macro std::ptr::addr_of。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。