[C언어] 이차원 배열

ET의 공부/C언어|2020. 12. 29. 23:17

2차원 배열

2차원 배열은 '배열의 배열'입니다. 배열 안에 배열이 들어있는 구조인데요

arr [0] = a_1[0],a_1[1],a_1[2],a_1[3],a_1[4],a_1[5], arr[1] = a_2[0],a_2[1],a_2[2],a_2[3],a_2[4],a_2[5] 의 구조입니다.

 

2차원 배열의 초기화

위 그림처럼 2행 6열 (원소는 1,5)의 배열엔 총 12개의 값을 저장할 수 있습니다.

 

#include <stdio.h>
#define raw 2
#define col 6
int main () {
    int i_arr[raw][col] ={0,1,2,3,4,5,6,7,8,9,10,11}; //배열의 선언 배열의 원소 크기보다 많은 양을 초기화 시켰다.
    //배열에 값 대입//
    for(int i = 0; i<raw;i++){
        for(int j = 0; j<col; j++)
        printf("i_arr[%d][%d]의 원소값: %d\n",i,j,i_arr[i][j]);
    }

    return 0;
}
//실행 결과
//i_arr[0][0]의 원소값: 0
//i_arr[0][1]의 원소값: 1
//i_arr[0][2]의 원소값: 2
//i_arr[0][3]의 원소값: 3
//i_arr[0][4]의 원소값: 4
//i_arr[0][5]의 원소값: 5
//i_arr[1][0]의 원소값: 6
//i_arr[1][1]의 원소값: 7
//i_arr[1][2]의 원소값: 8
//i_arr[1][3]의 원소값: 9
//i_arr[1][4]의 원소값: 10
//i_arr[1][5]의 원소값: 11

 

int i_arr[raw][col] ={0,1,2,3,4,5,6,7,8,9,10,11}; 처럼 총 배열 원소의 개수만큼 초기화를 할 수 있고

 

#include <stdio.h>
#define raw 2
#define col 6
int main () {
    int i_arr[raw][col] ={{0,1,2,3,4,5},{6,7,8,9,10,11}}; //배열의 선언 배열의 원소 크기보다 많은 양을 초기화 시켰다.
    //배열에 값 대입//
    for(int i = 0; i<raw;i++){
        for(int j = 0; j<col; j++)
        printf("i_arr[%d][%d]의 원소값: %d\n",i,j,i_arr[i][j]);
    }

    return 0;
}

 

int i_arr[raw][col] ={{0,1,2,3,4,5},{6,7,8,9,10,11}};  내부 중괄호{}를 횡단 위로 나누어서 선언이 가능합니다.

이전에 1차원 배열의 경우 int i_arr[num] ={0}; 으로 모두 0으로 초기화하는 법을 설명했는데 2차원 배열을 모두 0으로 초기화 하는 방법도 이와 같습니다.

 

#include <stdio.h>
#define raw 2
#define col 6
int main () {
    int i_arr[raw][col] ={0}; //배열의 선언 배열의 원소 크기보다 많은 양을 초기화 시켰다.
    //배열에 값 대입//
    for(int i = 0; i<raw;i++){
        for(int j = 0; j<col; j++)
        printf("i_arr[%d][%d]의 원소값: %d\n",i,j,i_arr[i][j]);
    }

    return 0;
}
//i_arr[0][0]의 원소값: 0
//i_arr[0][1]의 원소값: 0
//i_arr[0][2]의 원소값: 0
//i_arr[0][3]의 원소값: 0
//i_arr[0][4]의 원소값: 0
//i_arr[0][5]의 원소값: 0
//i_arr[1][0]의 원소값: 0
//i_arr[1][1]의 원소값: 0
//i_arr[1][2]의 원소값: 0
//i_arr[1][3]의 원소값: 0
//i_arr[1][4]의 원소값: 0
//i_arr[1][5]의 원소값: 0

 

2차원 배열의 접근은 2중 for문을 이용하여 행, 열 순으로 접근합니다.

    for(int i = 0; i<raw;i++){

        for(int j = 0; j<col; j++)

        printf("i_arr[%d][%d]의 원소값: %d\n",i,j,i_arr[i][j]);

    }

첫 번째 for문에서 열(0,1)에 접근을 하고 해당 열에서 2번째 for문에서 행(0,1,2,3,4,5)에 접근하게 됩니다.

 

만약 더 높은 차원의 배열을 선언하고자 한다면 3차원 배열의 경우 배열[1ch][2ch][3ch]로 선언하고 for문은 3개를 사용하여 각 요소에 접근하면 됩니다.

댓글()