Index Expressions

An index expression accesses an element of an array.

index_expr = expression "[" expression "]" ;

The expression before the brackets MUST have an array type [T; N].

The index expression MUST have an unsigned integer type (u8, u16, u32, or u64).

The type of an index expression is the element type T.

fn main() -> i32 {
    let arr: [i32; 3] = [10, 42, 100];
    arr[1]  // 42
}

Bounds Checking

For constant indices, bounds checking MUST be performed at compile time.

For variable indices, bounds checking MUST be performed at runtime.

An out-of-bounds access MUST cause a runtime panic.

fn main() -> i32 {
    let arr: [i32; 3] = [1, 2, 3];
    arr[5]  // Compile-time error: index out of bounds
}
fn main() -> i32 {
    let arr: [i32; 3] = [1, 2, 3];
    let idx = 5;
    arr[idx]  // Runtime error: index out of bounds
}

Index Assignment

For mutable arrays, elements can be assigned using index expressions.

fn main() -> i32 {
    let mut arr: [i32; 2] = [0, 0];
    arr[0] = 20;
    arr[1] = 22;
    arr[0] + arr[1]  // 42
}