主要是将指针强转为usize,即数据的地址,然后加上偏移量
一级指针的偏移量是4,二级指针的偏移量是8 ,三级指针的偏移量也是8,多级指针的偏移应该都是8。
大家可以在https://play.rust-lang.org/ 在线运行
一级指针代码
fn main() {
let mut arr=['a','b','c','d','e'];
unsafe{
let mut p:*mut char=&mut arr[0];
p=((p as usize) + 4) as *mut char;
println!("{}",*p );
}
}
二级指针代码
fn main() {
let mut a='a';
let mut b='b';
let mut c='c';
let mut d='d';
let mut e='e';
let mut arrp:[* mut char;5]=[&mut a,&mut b,&mut c,&mut d,&mut e];
unsafe{
let mut p:*mut*mut char= &mut arrp[0];
p=((p as usize) + 8) as *mut*mut char;
println!("{}",**p );
}
}
三级指针
fn main() {
let mut a='a';
let mut b='b';
let mut c='c';
let mut d='d';
let mut e='e';
let mut f='f';
let mut g='g';
let mut h='h';
let mut i='i';
let mut j='j';
let mut k='k';
let mut l='l';
let mut m='m';
let mut n='n';
let mut o='o';
let mut arrp1:[* mut char;5]=[&mut a,&mut b,&mut c,&mut d,&mut e];
let mut arrp2:[* mut char;5]=[&mut f,&mut g,&mut h,&mut i,&mut j];
let mut arrp3:[* mut char;5]=[&mut k,&mut l,&mut m,&mut n,&mut o];
unsafe{
let mut arrpp:[* mut * mut char;3]=[& mut arrp1[0],& mut arrp2[0],& mut arrp3[0]];
let mut p:*mut *mut *mut char=&mut arrpp[0];
p=((p as usize) + 8) as *mut*mut*mut char;
println!("{}",***p );
}
}
1626

被折叠的 条评论
为什么被折叠?



