더북(TheBook)
int a = 10;  // 변수 a 선언과 동시에 초기화
int *b;      // 포인터 변수 b 선언
b = &a;      // 포인터 변수 b 초기화
*b = 15;     // 역참조를 통해 변수 a의 값을 15로 변경

이제 이 코드가 어떤 기능을 하는지는 어렴풋이 이해했으리라 생각합니다. 그런데 조금 머리가 복잡해졌을 것입니다. 포인터를 처음 접하는 사람은 대부분 머리가 복잡해지기 시작하면서, 명확하게 파악이 안 되고 헷갈린다는 얘기를 합니다.

그 이유는 포인터 변수 b*를 언제 쓰고, 언제는 쓰지 않는지가 헷갈리기 때문입니다. 여기가 바로 포인터를 어렵게 받아들이는 지점입니다. 포인터 변수에서 *를 사용하고 사용하지 않는 경우를 확실하게 이해해야 포인터를 이해하기가 쉽습니다. 다음과 같이 정리하면 이 문제는 해결됩니다.

포인터 변수에 *를 사용하는 경우는 무조건 두 가지 중 하나입니다.

포인터 변수를 선언하고자 할 때 *를 사용한다.

역참조를 할 때 *를 사용한다.

int *b;는 포인터 변수를 선언하는 문장이므로 *를 사용한 것입니다.

그러면 *b = 15는 포인터를 선언하는 것일까요? 물론 선언하고 있지 않은데 *를 사용하였습니다. 그러므로 여기서 *는 역참조를 하고 있는 것입니다.

b = &a;는 어떨까요? 왜 포인터 변수 b*를 사용하지 않았는지에 대한 답도 쉽게 할 수 있을 것입니다. 포인터 변수 b를 선언한 것도 아니고 역참조를 하는 것도 아닙니다. 두 경우에 해당하지 않는다면, 그냥 포인터 변수를 초기화하는 것이므로 *를 사용하지 않았습니다.

그렇다면 int *b = &a;는 왜 *를 사용했을까요? 이는 포인터 변수를 선언과 동시에 초기화하는 코드입니다. 선언을 하기 때문에 *를 사용합니다.

지금까지 얘기한 내용 중 핵심만 제대로 기억하고 적용한다면, 개념을 확실하게 이해할 수 있으며 포인터가 어렵지 않을 것입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.