2014년 5월 8일 목요일

포인터의 포인터, 이중 포인터에 대해서 알아보자.

 던전워즈
저번 시간에 간략하게 나마 포인터의 개념과 메모리의 구조에 대해서 알아봤다.
포인터는 어떠한 변수가 메모리 상의 어느 위치에 저장되 있는지 주소값을 갖고 있는 변수라고 했다.

그런데 포인터 중에는 특이한 포인터가 있으니 바로 이중포인터다.

일반적으로 이중 포인터는 다음과 같이 선언을 한다.

int형의 이중 포인터를 예로 들면

int **pointer;

포인터가 주소를 저장하는 변수라면 이중포인터의 역할은 무엇인가?

이중 포인터도 일반 포이터와 마찬가지로 단지 주소를 저장하는 변수일뿐이다.

그렇다면 무엇의 주소를 저장하는가가 이중포인터의 관건일 것이다.

포인터는 메모리상의 주소를 저장하고 있다.

컴퓨터에서 메모리의 주소는 결국 양의 값을 가지는 정수 값일뿐이다.

어떠한 변수값을 예로 들어보자.

int t = 120;

이라는 변수가 선언이 된다면 해당 변수는 메모리 상의 어떠한 위치에 저장이 되고 그위치에는 120이라는 값이 저장이 될것이다.

그리고 t의 포인터 를 선언해보자

int *pt = &t;

라고 선언을 하게 되면 포인터 pt는 t의 값이 저장된 주소 값을 갖게 될것이다.

만일 t가 메모리 주소 1000이라는 위치에 저장이 되었다 가정한다면 포인터 변수 pt는 1000이라는 값을 가지게 된다.

변수는 값을 메모리에 저장하고 있고 포인터 역시 변수일뿐이다.

그렇다면 pt가 가지고 있는 1000이라는 주소값또한 메모리상의 어떠한 위치에 놓여질 것이다. 이제 pt의 이중포인터를 선언해보자.

int **ppt = &pt;

pt또한 변수이기 때문에 &키워드를 사용해서 그것의 주소값을 기록할 수 있다.

ppt는 pt의 메모리 상 주소값을 가지게 된다.

즉 1000이라는 값이 메모리의 어느위치에 저장이 되있는지 ppt에 저장이 되는 것이다.

이렇게 이중포인터는 포인터의 메모리상 주소를 기록하기 위한 용도를 가지는 변수이다.

댓글 없음:

댓글 쓰기