p.cast::<u8>().offset(i).write(0) is probably the most direct way.
Note that you can write also write array directly, not using loop (at that point, however, it becomes unclear why do you need a MaybeUninit at the first place).
let (mut stat, key) = unsafe {
let mut key = MaybeUninit::<[Wrapping<u8>; 256]>::uninit();
let mut stat = MaybeUninit::<rc4_stat>::uninit();
let kbin = k.as_bytes();
let p = ptr::addr_of_mut!((*stat.as_mut_ptr()).m);
p.write(Wrapping(0));
let p = ptr::addr_of_mut!((*stat.as_mut_ptr()).n);
p.write(Wrapping(0));
let p1 = ptr::addr_of_mut!((*stat.as_mut_ptr()).key);
let p2 = key.as_mut_ptr();
for i in 0..=255 {
p1.cast::<Wrapping<u8>>().offset(i).write(Wrapping(i as u8));
p2.cast::<Wrapping<u8>>()
.offset(i)
.write(Wrapping(kbin[(i as usize) % k.len()]));
}
(stat.assume_init(), key.assume_init())
};