C/C++ - Double 포인터

int   val = 100;
int  *pt1 = &val; // Single 포인터
int **pt2 = &pt1; // Double 포인터
 

위 코드를 실행하게 되면 컴파일러는 아래의 그림과 같은 코드를 메인 메모리에 만들 것이다.
그림에서 볼 수 있듯이, Single 포인터 pt1은 한번 "지시"를 하고, Double 포인터 pt2는 두 번 "지시"를 한다. 참조 할 때에도 마찬가지이다. pt1은 한번 참조를 통해 100 이라는 값을 얻고 (즉, *pt1;), pt2는 두 번 참조를 통해 100 이라는 값을 얻는다 (즉, **pt2;). 어떻게 하면 두 번 "지시"를 할 수 있을까?
그 해답은 아주 간단하다. Single 포인터의 주소를 저장하면 우리는 두 번 "지시"를 할 수 있다. 이것이 Double 포인터의 기능이다.

Double 포인터는 어떤 용도로 사용 하는가?
  동적인 2차원 배열을 만들 때 주로 사용 되어 진다.





위의 예제 코드에서, Single 포인터는 int형의 주소를 저장하고 Double 포인터는 int*형의 주소 (즉, Single 포인터의 주소)를 저장한다.

포인터에 대해 도저히 감히 잡히지 않는 다면은 아래의 코드와 같이 괄호를 사용하여 묶어 보라. 괄호를 제외한 부분이 저장되는 주소이다. 첫 번째 Single 포인터의 경우 int 가 남는다. 따라서 int형의 주소가 저장 된다. 그리고 두 번째 Double 포인터의 경우는 int* 가 남는다. 따라서 int*형의 주소 (즉, Single 포인터의 주소)가 저장 된다.

int     val = 100;
int  (*pt1) = &val; // Single 포인터
int *(*pt2) = &pt1; // Double 포인터
 

Triple 포인터도 위와 마찬가지로 이해하면, 우리는 쉽게 int**형의 주소 (즉, Double 포인터의 주소)가 저장 된다는 것을 알 수 있다.

괄호를 묶는 방법은 가급적 쓰지 마라.
  실질적으로
괄호 묶는 방법을 사용하는 개발자는 잘 없기 때문에, 다른 개발자가 쓴 Code를 이해하
  지 못하는 경우가  생긴다.
2006/12/23 17:30 2006/12/23 17:30
Trackback 0 Comment 0

Trackback : http://irooti.com/tt/trackback/5

prev 1 ... 8 9 10 11 12 13 14 15 16 next