관리 메뉴

Storage Gonie

(14) C++ 2차원 배열 본문

알고리즘/문제해결을 위한 C++ 공부

(14) C++ 2차원 배열

Storage Gonie 2019. 4. 27. 09:48
반응형

# 배열 선언방법

@ 정적배열

// N * M 행렬
int arr[3][5];
// N * M 행렬
int arr[3][5] = {{1, 2, 3, 4, 5},
                 {6, 7, 8, 9, 10},
                 {11, 12, 13, 14, 15}};
// 배열 선언시 왼쪽인자를 생략할 수 있음. (오른쪽 인자는 생략 불가, 둘다 생략하는 것도 불가)
int arr[][5] = {{1, 2, 3, 4, 5},
                {6, 7, 8, 9, 10},
                {11, 12, 13, 14, 15}};

@ 동적배열

- 아직까진 사용할 일이 없었어서 학습 보류(동적할당이 필요한 이유 포함)

// 1차원 배열 할당받는 방법
int width = 8;
int *arr;
arr = (int *) malloc ( sizeof(int) * width ); // 동적으로 할당받은 메모리도 배열처럼 접근이 가능함 arr[0], arr[1],,,


// 2차원 배열 할당받는 방법
int height = 6, width = 8;
int **arr;
arr = (int**) malloc ( sizeof(int*) * height );
for(int i=0; i<height; i++){
    arr[i] = (int*) malloc ( sizeof(int) * width );
}

//
for(int i=0; i<height; i++){
    free(arr[i]);
}
free(arr);

출처: https://codeng.tistory.com/8 [도전!]

 

# 다양한 배열 초기화 방법(입력으로 배열값 초기화 포함)
@ 초기화값 지정

// 배열의 크기보다 적은 초기화 값이 있으면 나머지 요소는 0으로 초기화된다.
int arr[3][5] = {{1, 2, 3},
                 {6, 7},
                 {11}};
// 위의 원리로 다차원 배열의 원소를 모두 0으로 초기화 할 수 있다.
int arr[3][5] = {0};

 

@ 사용자 입력으로 입력받기

// 초기화 시킬 값만 입력받는 방법
int arr[3][5];

for (int i = 0; i < 3; i++){
    for (int j = 0; j < 3; j++){
        scanf("%d", &arr[i][j]);
    }
}
// 배열의 크기부터 값까지 모두 사용자 입력으로부터 입력받는 방법
int a;
int b;
    
scanf ("%d %d", &a, &b);
    
int arr[a][b];              // a, b를 입력받는 scanf 이후에 있어야 오류가 없다.

for (int i = 0; i < a; i++){
    for(int j = 0; j < b; j++){
        scanf("%d", &arr[i][j]);        
    }
}

 

# 배열의 크기 구하는 방법

// N * M 행렬
int arr[3][5] = {{1, 2, 3, 4, 5},
                 {6, 7, 8, 9, 10},
                 {11, 12, 13, 14, 15}};

int row = sizeof(arr) / sizeof(arr[0]);     // 3 : 행 크기
int column = sizeof(arr[0]) / sizeof(int);  // 5 : 열 크기

 

 

반응형
Comments