프로그래밍/C언어

포인터배열(Ragged) c언어

콘파냐 2014. 2. 14. 22:44
반응형

이전에 동적할당의 경우에서도 잠깐 나왔었는데, 포인터 배열에대해서 좀 더 알아보자. 포인터 배열은 말 그대로 배열의 요소들이 포인터인 배열이다. 선언을 하는 방법은 int *arr[5]; // 이런식으로 단순히 *구두점을 배열명에 붙여주면된다.

int *arr[5]의 각요소들인 arr[0],arr[1],arr[2],arr[3],arr[4] 은 포인터가 된다. 

아래의 예를 보자.


위 코드는 두가지 사실을 말해준다. 

첫째로 각 요소들은 포인터로서 같은 크기지만, 각각 크기가 다른 문자열을 가리키고 있다.

두번째는 이런 요소들이 문자열을 가리킨다고해서  배열명은 아니라는 것이다. 마치 2차배열과 동작이 비슷해 보이지만, 이런 포인터 배열의 요소는 어디까지나 포인터라는 것이다. 만약 배열명으로 작동한다면, 배열명은 포인터 상수이기 때문에 12번째 줄에서 동적할당 시에 에러가 났을 것이다. 



이런 포인터 배열은 Ragged 배열이라고 하는데 장점은 메모리를 낭비없이 쓸 수 있다는 것이다. 배열 요소들은 포인터로서 값은 일정한데 반해서 그 포인터들이 가르키는 요소들의 크기는 제각각일 수 있다.

때문에, 타입은 같지만 각각 크기가 다른 자료형들을 (포인터로)일률적으로 다루는데 효율적이다.

반응형