引用是一个用于指代另一个值的值。
文中举了一个例子,在使用一个大数组时,如果要复制,那开销很大,‘引用’就是创建一个副本,有些象C中的地址,只需要把副本的头地址指向这里就行,但是好象Rust的引用,只能读,还没有看到怎么写的例子。
有程序来加深印象:
fn main() {
let a = 42;
let r = &a;
let b = a + *r; //实现a 与 a 相加(通过解引用),并将结果赋值给b
println!(" a + a = {}",b);
}
输出结果:
liujianhuadeiMac:samp2_3 liujianhua$ cargo run
Compiling samp2_3 v0.1.0 (/Users/liujianhua/Rust/samp2_3)
Finished dev [unoptimized + debuginfo] target(s) in 3.29s
Running `target/debug/samp2_3`
a + a = 84
这个例子,实现了引用 ‘&’,解引‘*’,感觉就是C的指针,但又有根本的不同。
再有例子,数字类型数组,查找一个数字
fn main() {
let needle = 0o204;
let haystack = [1,1,2,5,15,52,132,877,4140,21147];
for item in &haystack {
if *item == needle {
println!("{}", item);
}
}
}
在这个例子中,使用引用 haystack数组这生成跌代for循环,再使用*item来解引用。
执行结果如下:
liujianhuadeiMac:samp2_3 liujianhua$ cargo run
Compiling samp2_3 v0.1.0 (/Users/liujianhua/Rust/samp2_3)
Finished dev [unoptimized + debuginfo] target(s) in 0.37s
Running `target/debug/samp2_3`
132
【总结】
这次学习了Rust的引用,与解引,来实现特定的功能。如果有C指针地址的基础应该非常好理解。