본문 바로가기

프로그래밍/C Programming

C언어 예제를 통해 알아보는 포인터

C언어를 처음 접하는 분들이 가장 많이 힘들어하는 것이 

포인터가 아닐까 싶습니다. 그래서 오늘은 간단한 예제와 함께

포인터란 무엇인지 알아볼까 합니다.


이게 오늘 살펴볼 예제인데요. 참고로 Atom으로 작성을 했습니다.

그렇다면 하나씩 살펴보겠습니다.

우선 일반변수 num1에 10을 저장했고 num2에 20을 저장했습니다.

그리고 포인터 변수로 ptr1에는 num1의 주소를 가지고 있도록 했고, ptr2에는 num2의 주소를 가지고 있도록 했습니다.


여기서 참고할만한 것은, 포인터 변수에는 대체로 p를 붙인다는 것입니다. 사소하고, 별로 중요하지 않다고 생각할 수도 있지만

처음 C언어를 접하는 분들에게는 충분히 궁금해할만한 부분이라고 생각합니다. 물론 여기서 ptr이라고 한 것은

일반적으로 p를 앞에다 붙이기 때문에 가장 연관성 있는 변수 이름을 지어보고자 pointer의 줄임말로 ptr을 사용했습니다.


그렇다면 현재 상태 그대로 출력하게 된다면 어떻게 될까요?

우선 ptr1이 가지고 있는 값은 num1의 값과 같이 10이 됩니다.

ptr2가 가지고 있는 값은 num2의 값과 같이 20이 됩니다.


여기서 중요한 것은 num1과  num2에는 각 값과 주소 값이 각각 저장되어 있다는 것입니다.

그런데 이 상태에서 num1이 가지고 있는 주소값을 ptr1에게 가리키도록 했습니다. ptr1에도 별도로 주소가 있는데 말이죠.

즉, 쉽게 생각하면 num1과 ptr1의 주소는 서로 다르지만, ptr1의 주소가  num1의 주소와 연결되어 있다고 생각하시면 됩니다.


다음으로 넘어가겠습니다.

13번째 라인에 보시면 ptr1과 ptr2가 가지고 있는 값에 각 10을 더하고 뺏습니다.

그러면 ptr1과 ptr2가 가지고 있는 값을 직접 건드린 것이기 때문에 ptr1은 20이 되고, ptr2는 10이 됩니다.

그리고 주소값은 기존과 동일하게 출력이 됩니다.


마지막으로 19번째 라인부터 보면, ptr1의 값을 temp에 저장시키고, ptr2의 값을 ptr1에, temp의 값을 ptr2에 대입했습니다.

쉽게 말해 ptr1이 가지고 있는 값과 ptr2가 가지고 있는 값을 서로 swap하는 과정인데요.


이렇게 되면 서로 가지고 있던 값이 교환되고, 주소는 기존과 동일하게 나오게 됩니다.

쉽게 말해 ptr1의 주소가 가리키고 있던 값을 temp라는 포인터 변수가 잠시 가지고 있게 한 뒤에

ptr1이 ptr2가 가지고 있는 값을 가지고 있게 하고, temp가 가지고 있는 값을 ptr2가 가지고 있도록 하는 것이죠.

결과적으로 봤을 때 ptr1과 ptr2의 값이 서로 바뀌게 되는 것입니다.



이상으로 간단한 예제를 통해 포인터에 대해서 알아보았는데요, 너무 글로만 설명해서

이해가 잘 되셨을지 모르겠네요 ㅎㅎ 혹시 몰라서 결과 출력 화면도 같이 첨부합니다.