#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 } } };
이런식으로 초기화가 된다.
'개발 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 |