← All Posts

[TIL] 260924 공부기록

포인터 방향 이해하기

TIL#

오늘은 한강에 가서 야외에서 개발 공부를 했다.

어제 풀다 만 문제를 이어서 풀면서 포인터 문제를 더 풀어봤고, 포인터가 함수에 전달될 때 어떻게 복사되는지 헷갈렸던 부분을 다시 공부했다.

오늘 공부한 내용#

오늘은 함수에 포인터를 전달했을 때 포인터 자체가 어떻게 동작하는지 문제를 통해 확인했다.

특히 다음 코드에서

Widget *p = &a;
change(p);

change() 함수의 w가 p와 완전히 같은 포인터라고 생각하면 안 된다는 것을 알게 됐다.

p가 가지고 있는 주소값이 w에 복사되어 전달되는 것이기 때문에 처음에는 둘 다 a를 가리키지만, p와 w는 서로 다른 포인터 변수다.

그래서

w = &b;

를 실행하면 w가 가리키는 대상만 b로 바뀐다.

p ─────> a (10)
w ─────> b (50)

p는 그대로 a를 가리키기 때문에 w->value = 100을 실행해도 a.value는 10으로 유지된다.

오늘 배운 점#

오늘 문제를 풀면서 가장 중요하게 이해한 것은 포인터가 가리키는 대상과 포인터 변수 자체를 구분해야 한다는 것이다.

처음에는 w = &b를 하면 p도 같이 바뀌는 것처럼 생각했는데, 실제로는 w에 새로운 주소를 대입한 것이기 때문에 w의 방향만 바뀐다.

즉,

  • w = &b → 포인터 w가 가리키는 대상을 변경
  • w->value = 100 → w가 가리키는 구조체의 값을 변경

그리고 함수에 포인터를 전달하면 주소값이 복사되어 전달된다는 것도 다시 확인했다.

느낀 점#

오늘 문제를 풀면서 포인터를 단순히 **“주소를 저장하는 변수”**라고만 외우고 있었던 것 같다.

특히 p와 w가 처음에는 같은 곳을 가리키니까 둘이 하나처럼 느껴졌는데, 실제로는 각각 다른 변수이고 단지 같은 주소값을 가지고 있을 뿐이라는 점을 이해하고 나니 방향을 추적하기가 조금 쉬워졌다.

결국 포인터 문제에서 중요한 것은 무조건 코드를 따라가기보다,

“지금 이 포인터 변수에는 어떤 주소가 들어있고, 그 주소가 누구를 가리키고 있는가?”

를 계속 구분해서 보는 것 같다.

아직 포인터를 완전히 익혔다고 생각하지는 않지만, 오늘처럼 직접 문제를 풀면서 헷갈리는 부분을 찾아가는 방식으로 계속 연습해봐야겠다.