library/
unsafes.rs

1use log::info;
2use std::slice;
3
4pub fn rawpointer() {
5    let mut a = 10;
6    let p1 = &a as *const i32;
7    let p2 = &mut a as *mut i32;
8
9    let address = 0x012345usize;
10    let _r = address as *const i32;
11    unsafe {
12        info!("p1: {}", *p1);
13        info!("p2: {}", *p2);
14
15        // info!("r: {}", *r);
16    }
17}
18
19fn split_at_mut(values: &mut [i32], idx: usize) -> (&mut [i32], &mut [i32]) {
20    assert!(idx < values.len());
21    let ptr = values.as_mut_ptr();
22    unsafe {
23        (
24            slice::from_raw_parts_mut(ptr, idx),
25            slice::from_raw_parts_mut(ptr.add(idx), values.len() - idx),
26        )
27    }
28}
29
30pub fn slices() {
31    let mut slice = vec![1, 2, 3, 4, 5];
32    let (l, r) = split_at_mut(&mut slice, 3);
33    info!("l: {:?}, r: {:?}", l, r);
34}
35
36extern "C" {
37    fn abs(val: i32) -> i32;
38}
39
40pub fn extern_test() {
41    let a = -5;
42    unsafe {
43        info!("{}", abs(a));
44    }
45}
46
47static mut COUNT: u32 = 0;