You need to use Rust's syntax for fixed size arrays:
pub unsafe extern "C" fn call_rust_funct(_p: *mut [u8; 3]) -> *mut [i32; 4] {
Box::into_raw(Box::new([99i32; 4]))
}
You can also always use *mut std::os::raw::c_void
and transmute it to the correct type.