개발 Study

#15. 배열(2)

HYuk 2021. 4. 12. 20:42
728x90

#2차원 배열

2차원 배열은 1차원 배열인 {1,2,3,4} 에서 세로로 배열이 추가 된 것이라고 생각하면된다.

선언법은

자료형 변수명[행][열];

 

초기화는 기존 1차원 배열과 같이

int Arr[2][3] = {};

으로 하면 0으로 초기화가 되고

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

 

으로 할 시

 

1 2 3

4 5 6

 

이런식으로 배열 된다. (행렬로 보면 편하다!!)

 

즉 int Arr[2][3]은 3개의 원소를 가진 배열이 2개 있다고 생각하면 된다.

 

2차원 배열은 배열의 원소로 배열을 가지는 것이다.

즉, Arr[0] 을 출력해보면 기존 1차원배열에서 Arr만 썼을 때, 출력 했던 것 처럼 주소값이 나온다.

 

하지만 2차원 배열에서는

int** ptr=Arr; // 불가능하다.

-> 포인터변수는 4bytes의 크기를 가지고 있고, Arr[2][3]의 배열에서 Arr는 한 행당 4*3(한 행당 3개의 자료를 가지고 있음) 즉 12byte의 크기를 가지고 있기 때문이다.

따라서 포인터 연산인

ptr+1(4bytes씩 증가) = Arr+1(12bytes씩 증가) 이 성립되지 않는다

-------------------------------------------------------------------------

이때 포인터에 2차원 배열을 대입하려면 다음과 같이 해야한다.

int Arr[2][3] = {}; 일 때

int(*ptr)[3] = Arr;

 

 

 

 

#n차원 배열

n차원 배열중 3차원 배열만 알아보자

기존 배열 선언하듯이

int Arr[2][3][4] = {};

했을경우,

4개 원소를 가진 배열이 3개있는데 그게 2세트 있다 라고 보면 된다.

 

즉,

int Arr[2][3][4] =

{ { { 111, 112, 113, 114 }, { 121, 122, 123, 124 }, { 131, 132, 133, 134 } },

  { { 211, 212, 213, 214 }, { 221, 222, 223, 224 }, { 231, 232, 233, 234 } }      };

이런식으로 초기화가 된다.

728x90

'개발 Study' 카테고리의 다른 글

#17 구조체 및 구조체포인터  (0) 2021.04.14
#16. 문자 배열  (0) 2021.04.14
#14. 포인터 (2) 및 배열  (0) 2021.04.10
#13. 포인터  (1) 2021.04.08
#12. 함수 오버로딩 및 디폴트 매개변수  (0) 2021.04.07