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 }
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;