difficulties/slice #882
Replies: 10 comments 14 replies
-
nice,真的很有解决之前对于切片概念的疑惑! |
Beta Was this translation helpful? Give feedback.
-
发现一个有意思的区别,这行代码如果去掉类型的话 let s2: &str = &String::from("banana");
// 去掉类型
let s2 = &String:from("banana"); 会自动将 s2 推断为 &String 类型的 |
Beta Was this translation helpful? Give feedback.
-
为什么 |
Beta Was this translation helpful? Give feedback.
-
这里有篇博客详细探讨了rust的slice到底是怎么回事Understanding Rust slices,以及reddit的讨论贴Rust slices and memory layout. 我目前的理解是slice就是访问某段连续数据的引用,带有边界检查的数据窗口,以避免复制这段内存,方便高效。至于[T]就表示内存中一段连续数据,不定长数组,不可直接定义,只能通过引用来访问。 |
Beta Was this translation helpful? Give feedback.
-
请教一下 我没有用 *part 解引用,这个打印出来的为啥不是part所在的内存地址呢? 就是arr的起始地址 |
Beta Was this translation helpful? Give feedback.
-
切片是把原始字符串中对应部分的内容复制了一份放在堆中吗? 要不怎么会大小不确定呢? 如果只是持有了切片的信息, 如起始位置和长度以及原字符串的地址, 那就变成是切片引用了. 切片到底是个什么? |
Beta Was this translation helpful? Give feedback.
-
可以这样简单地这么理解Rust中的概念(个人理解): 由于所有权问题,Rust又引入了引用,所以才导致上述理解问题,比如:&[u8] 和 &[u8, 10] 的大小居然是不一样的! 我觉得,其实吧,完全可以把 切片 这个概念去掉,然后把 切片引用 简化为 切片,最终就像 Go 中的概念一样。 |
Beta Was this translation helpful? Give feedback.
-
切片引用就是切片引用,没必要简化成切片,徒增困扰。“切片”是一个运行时动态概念,它是一段连续的数据,但长度在运行时动态变化的。“切片引用”是在分配在栈上指向切片的数据结构,是间接访问切片数据的“入口”,该结构包含两个整型数据,一个是切片数据的内存起始地址(相当于指针),一个是切片数据当前的长度,所以切片引用是定长的。 |
Beta Was this translation helpful? Give feedback.
-
我的理解是:切片就是定长的,包含指向数据起始位置的指针和数据的长度。 |
Beta Was this translation helpful? Give feedback.
-
difficulties/slice
https://course.rs/difficulties/slice.html
Beta Was this translation helpful? Give feedback.
All reactions