# 借用与引用

URL: https://caijiao.org/rust/04-ownership/02-borrowing
Source: docs/rust/04-ownership/02-borrowing.md
Description: Rust 的借用与引用机制允许在不转移所有权的情况下访问数据，确保内存安全同时提高代码灵活性。

借用（Borrowing）是 Rust 管理内存的另一核心机制，通过引用（Reference）实现数据的临时访问，无需获取所有权。

## 不可变引用（&）

允许对数据只读访问，多个不可变引用可以同时存在：

```rust
fn main() {
    let s = String::from("hello");
    let r1 = &s;
    let r2 = &s;
    println!("r1: {}, r2: {}", r1, r2);
}
```

## 可变引用（\&mut）

允许对数据进行修改，但在同一时间只能有一个可变引用，且不能同时有不可变引用：

```rust
fn main() {
    let mut s = String::from("hello");
    let r = &mut s;
    r.push_str(", world");
    println!("{}", r);
}
```

## 引用规则

- 任意时刻要么有多个不可变引用，要么有一个可变引用。
- 引用必须总是有效，避免悬垂引用。

## 函数中的引用

通过引用传参，避免所有权转移，提高性能：

```rust
fn calculate_length(s: &String) -> usize {
    s.len()
}

fn main() {
    let s1 = String::from("hello");
    let len = calculate_length(&s1);
    println!("长度为: {}", len);
}
```

---



Rust Playground 示例代码
