摘要: 示例程序: fn main() { let s = String::from("yuyoubei"); let bytes = s.as_bytes(); for (i, &item) in bytes.iter().enumerate() { println!("{} {}", i, item a 阅读全文
posted @ 2022-01-27 23:11 鱼又悲 阅读(3386) 评论(0) 推荐(0) 编辑
摘要: 引用规则: 在任何一个给定的时间里,要么只能拥有一个可变引用,要么只能拥有任意数量的不可变引用。 引用总是有效的。 阅读全文
posted @ 2022-01-27 17:36 鱼又悲 阅读(58) 评论(0) 推荐(0) 编辑
摘要: 悬垂指针:指指向曾经存在但现在已经被释放或被重新分配的内存区域的指针。 避免悬垂引用的方法:不要使用引用/指针(使用变量就可以了)。 阅读全文
posted @ 2022-01-27 17:34 鱼又悲 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 示例程序: fn main() { let mut s = String::from("hello"); make_yuyoubei(&mut s); println!("{}", s); // 输出 yuyoubei } fn make_yuyoubei(s: &mut String) { *s 阅读全文
posted @ 2022-01-26 22:51 鱼又悲 阅读(390) 评论(1) 推荐(0) 编辑
摘要: & 代表引用语义,它允许你在不获取变量的所有权的情况下使用值。 借用(borrowing):用过 引用 传递参数给函数的过程。 引用默认是不可变的。 示例程序: fn main() { let s = String::from("yuyoubei"); let len = get_len(&s); 阅读全文
posted @ 2022-01-26 22:12 鱼又悲 阅读(157) 评论(0) 推荐(0) 编辑
摘要: Rust中在函数返回值的时候也会发生作用域的转移。 示例程序: fn main() { let s1 = gives_ownership(); let s2 = String::from("hello"); let s3 = takes_and_gives_back(s2); } fn gives_ 阅读全文
posted @ 2022-01-26 12:24 鱼又悲 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 示例程序: fn main() { let s = String::from("yuyoubei"); // 变量s进入作用域 takes_ownership(s); // s的值被移进了函数,所以它从这里开始不再有效 let x = 5; // 变量x进入了作用域 makes_copy(x); / 阅读全文
posted @ 2022-01-25 12:13 鱼又悲 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 示例程序: fn main() { let x = 123; let y = x; println!("x = {}, y = {}", x, y); // 输出 x = 123, y = 123 } 上述程序中,在创建变量 y 之后,变量 x 继续有效。(而不会想 String 的赋值一样发生移动 阅读全文
posted @ 2022-01-24 18:10 鱼又悲 阅读(926) 评论(0) 推荐(0) 编辑
摘要: 变量的克隆clone能够拷贝堆内存中的数据。 当确实需要深度拷贝String堆上的数据,而不仅仅时栈数据时,就可以使用clone方法。 例如,下面的程序会将 s1 的内容克隆给 s2(包括栈内存和堆内存上的数据): fn main() { let s1 = String::from("yuyoube 阅读全文
posted @ 2022-01-24 17:59 鱼又悲 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 示例程序: fn main() { let s1 = String::from("yuyoubei"); let s2 = s1; println!("s1 = {}", s1); } 运行这段程序会报错,报错信息如下: error[E0382]: borrow of moved value: `s 阅读全文
posted @ 2022-01-24 17:55 鱼又悲 阅读(292) 评论(0) 推荐(0) 编辑