@@ -134,7 +134,7 @@ to compute the address of array index `idx`. This relies on
134134how arrays are laid out in memory.
135135* For a struct, however, in general we do not know how it is laid out, and we
136136also cannot use ` &mut base_ptr.field ` as that would be creating a
137- reference. So, you must carefully use the [ ` addr_of_mut ` ] macro . This creates
137+ reference. So, you must carefully use the [ raw reference ] [ raw_reference ] syntax . This creates
138138a raw pointer to the field without creating an intermediate reference:
139139
140140``` rust
@@ -147,7 +147,7 @@ struct Demo {
147147let mut uninit = MaybeUninit :: <Demo >:: uninit ();
148148// `&uninit.as_mut().field` would create a reference to an uninitialized `bool`,
149149// and thus be Undefined Behavior!
150- let f1_ptr = unsafe { ptr :: addr_of_mut! (( * uninit . as_mut_ptr ()). field) };
150+ let f1_ptr = unsafe { & raw mut ( * uninit . as_mut_ptr ()). field };
151151unsafe { f1_ptr . write (true ); }
152152
153153let init = unsafe { uninit . assume_init () };
@@ -167,7 +167,7 @@ it around at all, be sure to be *really* careful.
167167[ `MaybeUninit` ] : ../core/mem/union.MaybeUninit.html
168168[ assume_init ] : ../core/mem/union.MaybeUninit.html#method.assume_init
169169[ `ptr` ] : ../core/ptr/index.html
170- [ `addr_of_mut` ] : ../core/ptr/macro.addr_of_mut. html
170+ [ raw_reference ] : ../reference/types/pointer. html#r-type.pointer.raw.constructor
171171[ `write` ] : ../core/ptr/fn.write.html
172172[ `copy` ] : ../std/ptr/fn.copy.html
173173[ `copy_nonoverlapping` ] : ../std/ptr/fn.copy_nonoverlapping.html
0 commit comments