How to iterate over references to array elements in Rust

1 Answer

0 votes
/// Iterates over immutable references to array elements using `.iter()`.
/// This ensures the original array is not consumed or modified.
pub fn print_elements<const N: usize>(arr: &[i32; N]) {
    println!("--- Immutable Iteration ---");
    // .iter() produces references (&i32) to each element
    for item in arr.iter() {
        println!("Element reference: {:p}, Value: {}", item, item);
    }
}

/// Iterates over mutable references to array elements using `.iter_mut()`.
/// This allows modifying the elements in place via dereferencing (`*item`).
pub fn double_elements<const N: usize>(arr: &mut [i32; N]) {
    println!("--- Mutable Iteration ---");
    // .iter_mut() produces mutable references (&mut i32)
    for item in arr.iter_mut() {
        // Dereference the mutable reference to mutate the actual value on the stack
        *item *= 2;
    }
}

fn main() {
    // Initialize a mutable array on the stack
    let mut numbers = [10, 20, 30, 40, 50];

    // 1. Immutable reference iteration
    print_elements(&numbers);

    // 2. Mutable reference iteration
    double_elements(&mut numbers);

    // Verify the modifications
    println!("Array after mutation: {:?}", numbers);

    // 3. Alternative concise syntax using `&` in a `for` loop
    println!("--- Idiomatic loop borrowing ---");
    for num in &numbers {
        print!("{} ", num);
    }
}


/*
run:

--- Immutable Iteration ---
Element reference: 0x7ffc6b83c994, Value: 10
Element reference: 0x7ffc6b83c998, Value: 20
Element reference: 0x7ffc6b83c99c, Value: 30
Element reference: 0x7ffc6b83c9a0, Value: 40
Element reference: 0x7ffc6b83c9a4, Value: 50
--- Mutable Iteration ---
Array after mutation: [20, 40, 60, 80, 100]
--- Idiomatic loop borrowing ---
20 40 60 80 100

*/

 



answered 13 hours ago by avibootz

Related questions

...