Shared and Mutable References

Updated

October 31, 2026

Shared and Mutable References

Instead of transferring ownership, a function can access data via references. This mechanism is called borrowing.

Shared References (&T)

Shared references allow read-only access to data without taking ownership:

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

fn main() {
    let s = String::from("desk");
    let len = calculate_length(&s); // Pass reference
    println!("The length of '{}' is {}.", s, len); // s is still valid!
}

Mutable References (&mut T)

Mutable references permit modifying the borrowed value:

fn append_status(s: &mut String) {
    s.push_str(" [ACTIVE]");
}

fn main() {
    let mut task = String::from("Process orders");
    append_status(&mut task);
    println!("{}", task);
}