ptr::addr_of!() 与 ptr::addr_of_mut!() 宏
这两个宏用于取得变量的内存地址, 它们分别返回的是 *const T
和 *mut T
.
它们不需要先经过 "创建引用" 这一步, 因为有些情况, 当结构体的内存未对齐时, 是不能创建引用的.
use std::ptr; #[derive(Debug, Default)] struct Point { x: i32, y: i32, } fn main() { let mut point = Point::default(); let x_ptr: *const i32 = ptr::addr_of!(point.x); unsafe { assert_eq!(ptr::read(x_ptr), 0); } let y_ptr: *mut i32 = ptr::addr_of_mut!(point.y); unsafe { ptr::write(y_ptr, 42); } assert_eq!(point.y, 42); }