// Define a union
union MyUnion {
i: i32,
f: f32,
}
fn main() {
// 1. Initialization (you can only initialize one field at a time)
let mut u = MyUnion { i: 42 };
// 2. Reading and writing require an 'unsafe' block
unsafe {
println!("u.i as integer: {}", u.i);
// Mutating a field
u.f = 3.14;
// Reading the same memory as a different type (type punning)
println!("u.f as float: {}", u.f);
}
}
/*
run:
u.i as integer: 42
u.f as float: 3.14
*/