본문 바로가기

[기초] C언어

2차원 배열

- 1차원 배열이 여러 개 모인 형태

 

- 3 * 4의 2차원 배열 초기화

int test[3][4] = {{9,8,9,10},{10,9,10,9},{9,7,9,8}};

 

1. 1차원 배열로 2차원 형태로 표현하려면?
- “ 바둑판에 놓여있는 돌의 정보를 저장하려면? ”
- 돌 한 개의 정보를 어떤 형식의 변수에 저장할 것인지를 결정
           1바이트인 char형에 돌 한 개의 정보를 저장 가능
0 : 돌이 놓여있지 않은 경우
1 : 검은 돌이 놓여 있는 경우
2 : 흰 돌이 놓여있는 경우
- 바둑판 전체를 저장할 수 있는 메모리 크기를 결정
   바둑판은 총 361개(19X19)의 돌을 놓을 수 있다.

 

2. 2차원 배열의 필요성

- 2차원 공간에 있는 한 점(대상)은 자신의 위치를 좌표로 나타낼 때(x축 좌표 값, y축 좌표 값) 형태로 사용

- 바둑판에 놓인 바둑돌의 위치 정보도 2차원 형식의 데이터

---> char data[20]; ( 1차원 배열로 20바이트 크기의 변수를 선언 )

 

3. 2차원 배열 선언하기

- 같은 크기의 변수를 나열해서 적는 것이 불편하기 때문에 배열을 사용해서 크기가 같은 변수들끼리 묶어서 사용

EX) char data1, data2, data3, data4; ( 4개의 변수를 개별적으로 선언함 )

EX) char data[4]; ( 4개의 변수를 그룹으로 묶어 1차원 배열로 선언함 )

 

- 1차원 배열 5개를 묶으려면?

EX) char data1[4], data2[4], data3[4], data4[4], data5[4]; ( char[4] 형식의 1차원 배열 5개를 선언함 )

EX) char data[5][4]; ( char[4] 형식의 1차원 배열 5개를 묶어 2차원 배열로 선언함 )

 

- char data[5][4]가 아니라 char data[5][4]로 적는 이유?

연산자 우선 순위 때문,  [ ] 연산자는 동일한 우선순위를 가질 때 왼쪽에서 오른쪽으로 연산을 수행

EX) char (data[5])[4];

(1) char(data[5])[4]; ( data[5]라는 배열을 만들겠다. )

(2) char(data[5])[4]; ( data 배열의 각 요소(data[0], data[1] .... )) 는 char[4] 크기를 가진다.

 

4. 2차원 배열이 실제 메모리에 저장되는 형태

- 컴퓨터가 사용하는 메모리는 2차원 개념을 제공하지 않음

- 배열 문법으로 선언된 메모리는 1차원 형태로 메모리에 저장

- 소스 코드에서 배열을 2차원 형식으로 사용할 수 있는 이유

 

5. 2차원 배열 초기화 하기

- char temp1[3] = {1,2,3};

- char temp2[3] = {4,5,6};

- char temp[2][3] = {{1,2,3},{4,5,6}};

 

6. 2차원 데이터를 1차원 데이터로 변환하기

- 5행 4열 크기로 줄인 바둑판에서 1행 1열부터 순서대로 돌을 9개 놓는다.

- 돌을 놓을 때마다 0번부터 1씩 증가시키면서 돌에 번호를 적어둔다.

 

7. 1차원 데이터를 2차원 데이터로 변환하기

- 1차원 데이터를 2차원 데이터로 변환하려면 행 번호와 열 번호를 계산해야 한다.

- 2차원 배열은 메모리상에 1차원 형태로 데이터를 저장하면서 프로그래머가 이 메모리를 사용할 때 컴파일러가 수학 공식을 적용하여 2차원 개념을 제공

 

8. 1차원 배열과 2차원 배열의 차이

- 바둑판을 3행 4열 형태로 축소시켜놓고 돌이 놓여 있는 상황을 1차원 배열을 사용하여 초깃값을 지정한 후 바둑판의 상황을 출력

입력창
출력창

 

9. 2차원 배열에 바둑판 정보 저장하기

- 바둑판을 3행 4열 형태로 축소시켜놓고 돌이 놓여 있는 상황을 1차원 배열을 사용하여 초깃값을 저장한 후 바둑판의 상황을 출력

입력창
출력창

 

'[기초] C언어' 카테고리의 다른 글

함수심화, 활용  (0) 2024.05.29
함수  (0) 2024.05.27
배열  (0) 2024.05.27
반복문  (0) 2024.05.24
조건문  (2) 2024.05.24