이번에는 2차원 배열에 대해서 알아보자
2차원 배열은 데이터를 행과 열 형태로 저장하는 배열이다.
1차원 배열은 한줄로 데이터를 저장하지만, 2차원 배열은 표 형태로 저장하기 때문에 2개의 대괄호가 필요하다.
2차원 배열은 1차원과 마찬가지로 실제 메모리에서는 한 줄로 저장된다.

2차원 배열 선언은 "자료형 배열이름[행 크기][열 크기];" 의 방식으로 선언하면 된다
배열을 생성할 때는 세로-가로 순서로 길이를 지정한다.
이차원 '배열'이기 때문에 세로, 가로도 전부 index 0부터 시작한다.
헷갈릴 수 있지만, 행이 [i], 열이 [j] 인 위치에 어떤 데이터가 들어가 있는가만 보면 된다.
예를 들어 int arr[3][4]; 로 배열을 선언하면
행이 [0]일때 열은[0],[1],[2],[3]
행이 [1]일때 열은[0],[1],[2],[3]
행이 [2]일때 열은[0],[1],[2],[3]
총 12개의 공간을 확보한다.
이 확보된 공간에 데이터를 넣으면 되는데 값을 직접 저장하거나 초기화 할 수 있다.
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][1] = 3;
...
이처럼 공간 하나하나마다 값을 대입할 수 있다.
그리고 값을 초기화 하는 것도 가능한데,
int arr[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} };
중괄호 묶음이 3개 있고 그 안에 요소들이 4개씩 존재한다.
이것을 표로 살펴보면,
| [0] | [1] | [2] | [3] | |
| [0] | 1 | 2 | 3 | 4 |
| [1] | 5 | 6 | 7 | 8 |
| [2] | 9 | 10 | 11 | 12 |
2차원 배열의 구성을 쉽게 알 수 있다.
그렇다면 이 2차원 배열을 한번 출력해보자


1차원 배열 출력방식과 동일하되, 공간이 2차원으로 늘어난 것 밖에 차이가 나지 않는다.
하지만 이 출력 방식을 보고 어떤 C언어 문법을 사용하고 싶지 않은가?
바로 이중 반복문이다.
실제로 2차원 배열은 이중 반복문과 자주 사용된다.


2행 4열의 2차원 배열을 생성하고 바깥 반복문의 i는 행을 반복, 안쪽 반복문의 j는 열을 반복한다.
배열의 각 요소들은 정수이므로 %d 형식 지정자를 사용하였고, arr[i][j]를 출력하여 모든 요소들을 출력하도록 코드를 작성했다.
그러면 2차원 배열에 값을 직접 입력하고 배열을 표의 형태로 출력하는 코드를 작성해보자

2차원 배열 입력 부분에는 각 요소들에 scanf( )함수를 사용하여 값을 전부 입력하고,
모든 입력이 끝나면 2차원 배열 출력 부분으로 넘어서 이때까지 입력한 값들을 표 형태로 정리하여 출력하도록 하였다.

처음에 arr[0][0] 입력칸에 값을 입력하면 다음 arr[0][1]을 입력하라는 문구가 뜨고, 계속해서 모든 배열 index에 값을 전부 입력하면 \t 이스케이프 시퀀스를 통해 값을 정리하여 나타낼 수 있다.
숫자 뿐만이 아니라 문자열을 입력받도록 할 수도 있는데,
문자열을 입력할 때에는 char의 일차원 배열을 이용해야 한다. 한가지 유의할 점은 문자열의 경우 마지막 자리에는 종료문자(\0)가 들어간다는 것을 기억해두어야 한다.
예시를 살펴보자

코드를 살펴보면 숫자 배열과는 조금 차이가 있다.
char arr[4][20];은 arr[0]일때 [0~19] 에 문자를 대입, arr[1]일때 [0~19], arr[2]일때 [0~19], arr[3]일때 [0~19]에 문자를 대입한다
문자'열' 이기 때문에 기본적으로 arr[0~4]의 1차원 배열이므로 %s형식 지정자를 사용하여 반복문 하나만으로 입출력이 가능하다.
또한 배열에 숫자를 입력받을 때는 scanf( )에 &를 사용해야 하지만, 문자를 입력받을 때는 &를 붙이지 않아도 된다.

2차원 배열은 단순히 여러 개의 데이터를 저장하는 것을 넘어 행과 열 구조의 데이터를 효율적으로 관리하기 위한 중요한 자료구조이다. 물론 3차원, 4차원 등의 고차원 배열을 사용하여 복잡한 데이터를 표현하는 경우도 있지만 관리가 어려워 잘 쓰지는 않는다.
2차원 배열은 앞서 말했듯이 이중 반복문과 함께 사용되며, 게임 개발이나 알고리즘, 데이터 처리 등 다양한 분야에서 매우 자주 활용된다. 따라서 배열의 구조와 반복문의 흐름을 정확하게 이해하는 것이 중요하다.
VR게임 개발을 위한 언리얼엔진/C++ 공부한 내용 끄적이기...
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!