2.3 Arrays and Slices

배열은 같은 타입 T의 개체의 집합이고, 메모리 상에 연속하여 저장된다. 배열은 [] 괄호를 사용하여 생성하고, 컴파일 시에 알아야 하는 그 크기는 [T; size] 형식의 타입 선언 부로 이뤄진다.

조각들(Slices)은 배열과 유사하지만, 그들의 크기는 컴파일 시에 알 수가 없다. 대신, 조각은 두-단어 개체이고, 첫 단어는 데이터를 지칭하고 두 번째 단어는 조각의 크기이다. 조각은 타입 선언 &[T]을 통해 배열의 구획을 대여해 사용할 수 있다.

use std::mem;

// 이 함수는 slice를 대여한다.
fn analyze_slice(slice: &[i32]) {
    println!("first element of the slice: {}", slice[0]);
    println!("the slice has {} elements", slice.len());
}

fn main() {
    // 고정된 크기의 배열 (타입 선언은 불필요하다.)
    let xs: [i32; 5] = [1, 2, 3, 4, 5];

    // 모든 요소들이 같은 값으로 초기화 될 수 있다.
    let ys: [i32; 500] = [0; 500];

    // 색인은 0부터 시작한다.
    println!("first element of the array: {}", xs[0]);
    println!("second element of the array: {}", xs[1]);

    // `len` 배열의 길이를 반환한다.
    println!("array size: {}", xs.len());

    // 배열은 스택에 할당된다.
    println!("array occupies {} bytes", mem::size_of_val(&xs));

    // 배열은 자동적으로 조각으로 변환하여 대여할 수 있다.
    println!("borrow the whole array as a slice");
    analyze_slice(&xs);

    // 조각들은 배열의 부분을 가르킬 수 있다. 
    println!("borrow a section of the array as a slice");
    analyze_slice(&ys[1 .. 4]);

    // 색인이 범위를 넘어가면 panic으로 넘어간다. 
    println!("{}", xs[
}

results matching ""

    No results matching ""