다차원 배열은 1차원 그 이상의 배열입니다.
그 배열 중에 2차원 배열과 3차원 배열이 다차원 배열에 속합니다.
int arr[4]; //길이가 4인 1차원 int형 배열
int arr[4][4]; //가로가 4, 세로가 4인 2차원 int형 배열
int arr[4][4][4]; //가로가 4, 세로가 4, 높이가 4인 3차원 int형 배열
1-1 그림
이러한 개념이라고 보시면 됩니다.
1) 2차원배열
말 그대로 가로 세로를 가진 배열이라고 보시면 됩니다.
2차원 배열 선언 방식
자료형 배열 이름[세로 길이][가로길이];
예) int arr [3][4];
"int arr [2][4]"이라는 배열을 선언했다고 가정을 해본다고 합시다.
위의 그림처럼 배열이 생성이 됩니다. 이 배열을 초기화해보겠습니다.
위와 같이 초기화하게 되면 위의 사진처럼 배열이 초기화되는 것을 보실 수 있습니다.
간단한 c언어 예제를 보여드리겠습니다.
#include <Turboc.h>
#define MAX_ROW 3
#define MAX_COL 3
int i,j;
void arr_print(const int(*arr)[MAX_COL]){
for(i = 0; i < MAX_ROW; i++){
for(j = 0; j < MAX_COL; j++){
printf("%d", arr[i][j]);
}
printf("\n");
}
printf("\n");
}
int main(){
const int arr1[MAX_ROW][MAX_COL] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
const int arr2[MAX_ROW][MAX_COL] = { {1 }, {2, 3}, {4, 5, 6} };
const int arr3[MAX_ROW][MAX_COL] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
arr_print(arr1);
arr_print(arr2);
arr_print(arr3);
return 0;
}
2차원 배열을 매개변수로 사용할 때는 위의 코드와 같이 " 자료형 (*배열 이름)[2차원 배열에서 가로길이] "를 넣어서 2차원 배열을 만들어 줍니다.
2) 3차원 배열
테트리스를 사용할 때 3차원 배열을 사용하기도 하는데요
블록을 3차원 배열을 이용하여 생성합니다.
이런 식으로 선언을 해주고 테트리스 게임에서 블록 모양을 바꾸는 것이 3차원 배열을 이용해서 할 수 있다는 것을 알 수 있습니다. 그리고 배열을 탐색하여 1을 " ㅁ "로 바꿔주는 함수와 바닥에 닿을 때 그 바꾼 " ㅁ "만 땅에 닿게 하는 함수들을 선언해서 테스리스를 만듭니다.
간단한 예제를 보겠습니다.
#include <stdio.h>
int main() {
int i, j, k;
const int arr[4][4][4] = {
{{0,0,0,0},
{0,1,0,0},
{0,1,0,0},
{0,1,1,0}},
{{0,0,0,0},
{0,1,1,1},
{0,1,0,0},
{0,0,0,0}},
{{0,0,0,0},
{0,1,1,0},
{0,0,1,0},
{0,0,1,0}},
{{0,0,0,0},
{0,0,1,0},
{1,1,1,0},
{0,0,0,0}}
};
for(i = 0; i < 4; i++) {
for(j = 0; j < 4; j++) {
for(k = 0; k < 4; k++) {
if(arr[j][i][k] == 1)
printf("■");
else
printf(" ");
}
printf(" ");
}
printf("\n");
}
return 0;
}
앞서 설명한 3차원 배열을 사용하여 출력하였습니다.
3차원 배열을 매개변수로 사용할 때도 2차원 배열과 비슷합니다.
" 자료형 (*배열)[3차원 배열에서 세로 길이][3차원 배열에서 가로길이] " 로 사용합니다.
'study > C언어' 카테고리의 다른 글
[C언어] 주석처리 (0) | 2019.12.20 |
---|---|
[C언어] 1. HelloWorld (0) | 2019.12.20 |
[C언어] 테트리스 (0) | 2019.12.20 |
[C언어] 2차원 배열 회전 알고리즘 (0) | 2019.12.17 |
C언어로 야구게임 만들기 (0) | 2019.12.16 |