Rust 如何比较两个指针?

Rust 如何比较两个指针?,rust,Rust,我想比较这个循环中的两个指针: #[派生(调试)] 结构测试{ 第一:i32, 第二:i32 } fn main(){ 设test=vec![test{first:1,second:2},test{first:3,second:4},test{first:5,second:6}]; 用于测试中的项目。iter(){ println!(“--{:?}”,项目); println!(“项目{:p}”,项目); println!((“test.last().unwrap(){:p}”,test.las

我想比较这个循环中的两个指针:

#[派生(调试)]
结构测试{
第一:i32,
第二:i32
}
fn main(){
设test=vec![test{first:1,second:2},test{first:3,second:4},test{first:5,second:6}];
用于测试中的项目。iter(){
println!(“--{:?}”,项目);
println!(“项目{:p}”,项目);
println!((“test.last().unwrap(){:p}”,test.last().unwrap());
//如果item==test.last().unwrap(){
//println!(“最后一项!”);
//  }
}
}
println
给了我相同的地址:

——测试{first:1,second:2}
项目0x563caaf3bb40
test.last().unwrap()0x563caaf3bb50
---测试{first:3,second:4}
项目0x563caaf3bb48
test.last().unwrap()0x563caaf3bb50
---测试{第一次:5,第二次:6}
项目0x563caaf3bb50
test.last().unwrap()0x563caaf3bb50
但是,当我取消注释
if
语句时,会抛出以下错误:

error[E0369]:二进制操作“==”不能应用于类型“&&Test”`
-->src/main.rs:20:17
|
20 |如果项目==测试。最后一次()。展开(){
|-----^^--------------------测试(&T)
|            |
|&测试
|
=注意:`&Test可能缺少`std::cmp::PartialEq`的实现`

如何仅比较这两个指针?

当您比较指针时,实际上是在比较指针所指向的值。这是因为在
std
中有许多类型的实现:

impl<'_, '_, A, B> PartialEq<&'_ B> for &'_ A
where
    A: PartialEq<B> + ?Sized,
    B: ?Sized,
请注意,即使它使用原始指针,它也是安全的,因为它不会取消对指针的引用。由于存在从引用到原始指针的自动强制,因此可以使用:

if std::ptr::eq(item, test.last().unwrap()) {
    println!("Last item!");
}

谢谢,这正是我搜索的!我可能会在你的回答中澄清,你所说的“普通指针”是指一个参考,以帮助消除歧义
if std::ptr::eq(item, test.last().unwrap()) {
    println!("Last item!");
}