>>534
Rustはもっと単純
生ポインタを使えばC言語と全く同じ状態となる
fn main() {
 let mut a: i32 = 123;
 let raw_pointer = &mut a as *mut i32; // aの生ポインタを得る (unsafe不要)
 let b = &a; // bがaの参照を借用
 // a = 456; // これは借用ルールによりコンパイルエラーとなり書き換えできない
 unsafe { *raw_pointer = 456; } // 生ポインタを使えば自由自在に書き換え可能
 assert_eq!(a, 456); // 借用ルールを逸脱して書き換わっている
 assert_eq!(*b, 456); // 借用している参照bから見ても当然書き換わっている
}

じゃあUnsafeCellなどはいつ使うの?と思うだろうけど
それはRustで安全な型を提供するための部品として用いる
例えばRefCellやOnceCellなどの安全な型は部品としてUnsafeCellを用いている