在这段代码中,sref1
和sref2
是指向s
的地址,而且这两个地址是相同的。那么ref
和&
之间有什么区别?
fn main() {
let s = String::from("hello");
let sref1 = &s;
let ref sref2 = s;
println!("{:p}", sref1);
println!("{:p}", sref2);
f1(&s);
f2(s);
}
fn f1(_s: &String) {
println!("{:p}", _s);
}
fn f2(ref _s: String) {
println!("{:p}", _s);
}
在f1和f2中,_s也是字符串的地址,f2会拥有这个地址,但是f2打印的地址与f1打印的地址不同。为什么呢?