You can't do this with the built-in array type, but you can make use of arrayvec:
fn main() {
let array = [1, 2, 3];
let rev: ArrayVec<[_; 3]> = array.into_iter().rev().map(|x| *x).collect();
println!("{:#?}", rev);
// if you want to drop the AV, and get the array out:
// let array = rev.into_inner().unwrap();
}
ArrayVec::into_inner() moves out the whole array from itself, and in Rust move is semantically equal to memcpy, so theorically it can memcpy HUGE array out. But llvm can optimize out most of unnecessary memcpy so practically such move out is considered near zero cost.