[개발지식] 2차원 배열

Hyo Kyun Lee·2022년 12월 30일
0

개발지식

목록 보기
41/69

1. 개요

지금까지 배열을 선언하고 사용할때 당연하게 생각하면서, 아무런 생각없이 하였는데 이번 기사 공부를 통해 아직 개념이 미흡한 부분이 많다는 것을 느끼게 되었다.

2. 1차원 배열

말 그대로 1차원 배열이다.

C언어 기준으로 중괄호내 원소를 나열하여 나타내고, 한 배열안에 속한 원소들은 반드시 자료형이 동일해야 한다.

3. 2차원 배열

2차원 배열은 n행 m열 형태의 배열처럼, 일반적인 행과 열의 형태로 나뉘어진 배열이다.

중요한 것은 2차원 배열의 특징이다.

3-1. 2차원 배열의 선언 및 초기화

2차원 배열은 C언어 기준으로 중괄호에 원소들을 표기해주는 것으로 선언 및 초기화해줄 수 있다.

이때 두가지 선언 방법이 있는데, 첫번째 경우는 배열의 행과 열 크기에 정확히 맞춘 상태로 선언하는 경우이다.

int c[2][3] = {{1,2,3}, {4,5,6}};

  printf("%d\n", b[0][0]);
  printf("%d\n", b[0][1]);
  printf("%d\n", b[0][2]);
  printf("%d\n", b[1][0]); 
  printf("%d\n", b[1][1]); 
  printf("%d\n", b[1][2]); 

위 C언어 코드처럼 하나의 중괄호를 record, 한 행(row)으로 보면 이해가 쉬울 것 같다.

위와 같이 2행 3열의 배열을 선언한 후, 그대로 2행 3열의 배열 형태에 맞춰서 원소를 할당해주는 방법이 있다.

출력결과 >>
1
2
3
4
5
6

두번째 경우는 배열의 행과 열 크기에 정확히 맞추되, 구분을 짓지 않고 하나의 중괄호 형태로만 선언하는 방법이다.

int a[2][3] = {1,2,3,4,5,6};

  printf("%d\n", a[0][0]);
  printf("%d\n", a[0][1]);
  printf("%d\n", a[0][2]);
  printf("%d\n", a[1][0]);
  printf("%d\n", a[1][1]);
  printf("%d\n", a[1][2]);

위와 같이 중괄호 내에서 다시 중괄호를 사용하여 구분짓지 않고서도, 크기만 맞는다면 각 원소들이 순서대로 배열값으로 할당된다.

출력결과 >>
1
2
3
4
5
6

3-2. 2차원 배열 선언 및 초기화시 유의사항

2차원 배열의 선언을 할때 유의해야하는 경우는 배열의 크기에 맞추어 선언하지 않았을때 어떤 값이 할당되는지에 대한 것이다.

기본적으로 변수 및 배열이 선언되었을때, 값을 초기화하지 않는다면 쓰레기값이나 0으로 초기화된다.

보통 배열과 같이 하나의 단위로 묶는 구조에서는 초기화하지 않는 값은 0으로 초기화되는데, 2차원 배열 역시 마찬가지이다.

int b[2][3] = {{1,2,3}};

  printf("%d\n", b[0][0]);
  printf("%d\n", b[0][1]);
  printf("%d\n", b[0][2]);
  printf("%d\n", b[1][0]); //0
  printf("%d\n", b[1][1]); //0
  printf("%d\n", b[1][2]); //0

위에서 크기에 맞게 선언하지 않아도, 초기화하지않은 배열의 공간에는 0이 초기화된다.

출력결과 >>
1
2
3
0
0
0

4. 포인터 관련 유의사항

보통 배열을 포인터와 연관할 경우, p+1, p+2 등 배열의 주소를 순차적으로 건너뛰어 해당 주소에 해당하는 변수값을 어떻게 찾느냐가 중요한 개념이 될 것이다.

이때 "순차적으로 건너뛴다", "한 칸 건너뛴다"의 의미는 "해당 배열의 자료형 크기만큼(char -> 1byte, int -> 4byte) 배열의 주소값을 단계적으로 건너뛴다"라는 의미로 받아들이면 될 것 같다.

→ 그림자료

위 그림처럼, 2차원 배열이 메모리 주소를 참조한다면 행렬 size 및 자료형의 크기대로 주소값을 옮겨가며 행렬값을 초기화한다.

5. 참고자료

2차원 배열 관련 - https://studyc.tistory.com/16

0개의 댓글