如何获取切片的地址?

wan*_*len 2 rust

如何将切片转换为*const ()or usize

&[ T ] -> *const ()
Run Code Online (Sandbox Code Playgroud)

当然,我知道它会将胖指针降级为细长一滴长度。我的用例是比较两个切片的地址。

Cha*_*man 8

最好的方法是致电<[T]>::as_ptr()<[T]>::as_mut_ptr()

您还可以按照这些函数实现的方式来执行此操作,首先将切片转换为切片指针,然后将结果指针转换为指向元素类型的瘦指针:

let slice: &[T];
slice as *const [T] as *const T;
Run Code Online (Sandbox Code Playgroud)

然而,这些函数在 std 中提供,正是为了让您不要这样做。

如果您只想比较地址,则可以std::ptr::eq()直接使用切片进行调用。

  • @Kos如果你想要这样(我不清楚为什么),那么你确实必须将指针投射到某个地方,要么通过`as`,要么更好,通过[`cast()`](https://doc.rust -lang.org/stable/std/primitive.pointer.html#method.cast)。 (2认同)