Blog
网站首页
rust中的胖指针
rust中的胖指针
2022-10-11 17:05
2022-10-11 17:05
作者:
xmh0511
提交
`&[T]`在rust中表示一个胖指针,实际上是一个类似于结构体的数据 ````cpp struct FatPointer{ void* address_; std::size_t len_; }; using &[T] = FatPointer; //并不是一个合法的c++语法,只是表示类型 "&[T]" 这个整体就是一个FatPointer ```` 因此可以通过指针的方式获取到胖指针的`len_`的数据 ````rust let s = "abc"; let ptr = s.as_bytes(); // ptr.as_ptr(); // ptr.len(); let r = unsafe{ let ptr = &ptr as *const &[u8]; // ptr是一个胖指针,所以获取他的引用从而得到结构体的地址 let ptr = ptr as * const u8; let ptr = ptr.add(8); // 是指针指向FatPointer::len_ let r = ptr as * const usize; *r }; println!("{r}"); ```` 打印的结果就是3