【发布时间】:2015-04-03 06:53:46
【问题描述】:
如何使以下代码工作:
let arr: [u8; 3] = [1, 2, 3];
let x1: &[u8] = &arr[0..];
let x2: &[u8] = &arr[1..];
let d: isize = x2 - x1;
我在一个向量中有两个切片,我想知道它们的起始指针之间的区别(在该示例中应该是 1)。
【问题讨论】:
标签: rust slice pointer-arithmetic
如何使以下代码工作:
let arr: [u8; 3] = [1, 2, 3];
let x1: &[u8] = &arr[0..];
let x2: &[u8] = &arr[1..];
let d: isize = x2 - x1;
我在一个向量中有两个切片,我想知道它们的起始指针之间的区别(在该示例中应该是 1)。
【问题讨论】:
标签: rust slice pointer-arithmetic
其中一种方法是将指向切片内容的指针转换为 isize 并对这些值进行算术运算:
let arr: [u8; 3] = [1, 2, 3];
let x1: &[u8] = &arr[0..];
let x2: &[u8] = &arr[1..];
let d: isize = x2.as_ptr() as isize - x1.as_ptr() as isize;
println!("{}", d);
但我不确定如果地址不适合isize,这将如何工作。
【讨论】:
isize => 你的意思是,如果地址适合usize 但不适合isize?在这种情况下,您可以改为转换为 usize,尽管在没有下溢的情况下获得差异会稍微复杂一些。