KPlay의 코딩 그리고 잡동사니

배열은 1차원 배열 이외에도 2차원, 3차원, 4차원같은 다차원 배열이 있습니다.

하지만 90%이상이 1, 2차원 배열이 점유하고 있고 3차원 배열은 많이 쓰이지 않으며

특히 4차원 배열은 3차원인 우리 세상에 맞지 않기때문에

쓰일 확률이 거의 없다고 보시면 됩니다.

1. 이제 2차원 배열을 알아봅시다.

2차원 배열은 가로와 세로 즉, 행과 열로 이루어진 배열입니다

형식은 type darr[2][4] = {

{1, 2, 3, 4},

{5, 6, 7, 8}

};

과 같이 쓰이며

보시는대로 행(가로)가 두줄 열(세로)이 네줄인것을 알 수 있습니다

첫번째 대괄호에는 행의 값, 두번째 대괄호에는 열의 값을 넣어줍니다

2. 다차원 포인터를 알아봅시다

다차원 포인터는 배열과 동일하게 주소값을 저장하는 포인터,

주소값이 저장되어있는 변수의 주소값을 저장하는 포인터의 포인터 이렇게 나아갑니다

int num = 10;

int * ptr = # // 포인터의 선언과 초기화

int * dptr = &ptr // 포인터의 포인터의 선언과 초기화

포인터의 포인터의 포인터도 똑같이 *연산자를 3개 붙여주면 되겠죠

3. 2차원 배열의 포인터 값은 어떻게 지정해줄까?

int arr[2][4] = {0,}; 이 선언되어 있다고 합시다. 이 배열의 주소값을 저장하는 포인터 변수는 어떻식일까요?

결과부터 말씀드리면 위 배열의 주소값을 저장할 수 있는 포인터변수의 형태는 int (*ptr)[4] 입니다.

어떻게해서 int (*ptr)[4]라는 형식이 나왔는지 차근차근 알아봅시다

먼저, 이 배열에서의 arr과 arr[0] 그리고 arr[0][0]이 같은 곳을 가리키는 지를 알아봅시다.

printf함수를 이용하여 출력해보면

세개의 인자가 모두 같은 주소값을 나타므로 동일한곳 즉, arr[0][0]인 출발점을 가리킨다는것은 확실해졌습니다.

하지만 arr과 arr[0]은 주소값 출력을 위해 &연산자를 붙이지않아도 됐지만

arr[0][0]은 &arr[0][0]과 같이 1차원 배열의 인자의 주소값을

출력할때처럼 & 연산자를 붙여야했다

같은방식으로 두번째, 세번째 행인 arr[1]과 arr[1][0], arr[2]와 arr[2][0]또한 같은 결과가 나옵니다.

더 자세히 알기 위해 sizeof 연산자로 각각의 크기를 나타내보면

arr은 32바이트, arr[1]~arr[3]은 각각 8바이트가 나오는것을 확인할 수 있습니다

여기서 유추하여 arr이 가리키는것은 이 2차원 배열 전체이며 2차원 배열의 이름을 의미한다는것

또한, arr[1]부터 arr[3]까지는 각 행의 2개의 인자들을 가리키며 그 행의 이름을 의미한다는 것을 알 수 있습니다

즉, arr이라는 2 x 4의 2차원 배열은 arr[1]부터 arr[3]으로 인자가 2개인 1차원 배열 4개와 같습니다

따라서, 1차원 배열에서도 적용됐던 *(arr + i) = arr[i] 공식이 행(세로의 개수)에 의해 2차원 배열에서도 적용되어

행의 길이가 같은 2차원 배열은 똑같은 형태의 포인터 변수에 주소값을 넣을 수 있습니

가령 int arr[2][4]든, int arr[3][4]든 행의 개수는 4개이므로

arr + 1을 해주면 16바이트가 증가하는게 되어

arr + 1 은 arr[1]을 가리키기 때문에 2차원 배열의 포인터형의 조건은

1. 가리키는 대상(type 정보)

2. 배열이름(포인터)를 대상으로 값을 1 증가 및 감소 시 실제로는 얼마나 증감하는가?

(세로줄(열)의 개수)

두 가지를 고려하여

int (*ptr)[4]가 된다.

이것을 우리는 "배열 포인터"라고 부르며 말 그대로 배열을 가리키는 포인터 변수라는 뜻입니다.

앞에서 배운 "포인터 배열"과 혼동 할 수 있는데 포인터 배열은 포인터변수로 이루어진 배열을 말하는것이며

전혀 다르므로 주의해야합니다

햇갈리지 않는 방법은 앞의 기본적으로 한글문법은 앞에나오는 단어가 뒤의 단어를 보충하는 의미라고 기억하면 편합니다.

배열 포인터(배열의 포인터) / 포인터 배열(포인터의 배열)

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band