rust语言引用和借用

本文用作方便自我理解而写,如有错,恳请指正,谢谢

引用在rust语言中采用&取地址符表示,它用来创建一个指向值的应用,但是并不拥有它,所以当引用离开其值指向的作用域后也不会被丢弃,下图是这个引用的指向

这是一个使用引用的例子,可以运行看到,这里使用了引用,使得s的所有权并没有转移,因为引用并不会拥有这个值,所以也就无法对这个值进行修改,比如下方第二个代码块就会报错 

fn main() {
   let s = String::from("hello");
   println!("{s}");
   let len = length(&s);
   println!("{len}");
   println!("{s}");

}

fn length(s: &String) -> usize {
   return s.len()
}

 

fn main() {
   let mut s = String::from("hello");
   println!("{s}");
   append(&s);
   println!("{s}");


}


fn append(mut s: &String) {
   s.push_str("world")
}

而想要修改这个值,我们就会使用到借用&mut

fn main() {
   let mut s = String::from("hello");
   println!("{s}");
   append(&mut s);
   println!("{s}");


}


fn append(mut s: &mut String) {
   s.push_str("world")
}

但是如果同时出现了引用和借用,引用的变量将无法使用,因为借用可能会改变原本的值,所以根据rust的安全规则释放了该值的内存,在给定时间里,要么只能有一个同一值得可变引用或多个不可变引用 

fn main() {
   let mut s = String::from("hello");
   println!("{s}");

   let s1 = &s;
   let s2 = &s;
   let s3 = &mut s;
   println!("{s1}");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值