int *p; 같은 표기법은 많은 프린이들을 헷갈리게 만드는 주범인 것 같음.

int*는 int를 가리키는 포인터 타입이고 int**는 int*를 가리키는 포인터 타입... 이런 식으로 포인터 그 자체도 일종의 타입이다.

똑같이 메모리의 주소를 가리키는데 왜 int*와 int**를 구분했냐고 할 수 있지만, 다같은 int*로 통일해버리면 이게 int를 가리키는 것인지 int*를 가리키는지 알 수 없기 때문이다. 같은 크기라도 목적에 따라 다른 자료형을 쓰는 것과 같다고 할 수 있겠다.

보통 다중 포인터가 쓰이는 대표적인 경우는 동적 할당으로 배열을 생성할 때다. 다차원 배열이나 구조체 포인터 배열 등이 그러하다. 다만 정적 할당한 다차원 배열은 실제로는 1차원 배열이므로 다차원 포인터를 사용할 수는 없다. 동적 할당한 다차원 배열도 배열 포인터의 배열인 경우만 해당한다. 만약 1차원 배열로 생성했으면 다중포인터를 쓸 수는 없다.

많은 입문자들이 c를 처음 시작할 때 포인터 파트에 들어가면 겁부터 먹지만 실제로는 별거 없다. 나중에 가면 밥 먹듯이 쓰는게 포인터다. 기본적인 개념만 까먹지 않으면 어려울게 없다.