티스토리 뷰

안녕하세요, IT디자이너입니다. 

 

포인터는 특정 메모리 위치의 값을 가리키는 변수를 뜻합니다. 의미는 정말 간단하죠? 하지만 응용을 하게된다면 끝도없이 어려워질 수 있습니다. ㅜㅜ

 

 

포인터는 초기화할 때 그리고 특정 메모리 위치의 값을 반환할 때 *(asterisk) 연산자를 사용해서 사용합니다. !! 

 

바로 예를 들어서 설명드리도록 하겠습니다.

 

포인터 사용방법

위 사진을 보시면은 특정 값으로 초기화된 int 데이터 타입의 변수의 주소를 포인터 변수를 초기화할 때 사용하였습니다. 

 

즉 ptr은 num 변수의 주소를 가리키고요 *(asterisk) 연산자를 이용해서 가리키는 주소의 값을 반환하도록 하는 것입니다. 

 

그러면 ptr만 printf() 함수로 출력하였을 때 num의 주소가 나오겠네요?

 

포인터의 값과 num의 주소

네 맞습니다. 포인터 변수의 값과 num의 주소는 동일합니다. ! ( %p는 16진수 메모리 주소를 나타내는 서식 지정자입니다. )

그렇기 때문에 *(asterisk) 연산자를 이용해서 연산하였을 때 num의 값을 반환하게 되는것입니다. !

 

그런데 굳이 이렇게 복잡하게 포인터를 사용하는 이유는 무엇일까요? 그 이유중 한 가지는 함수가 있습니다. !

 

위 사진을 보시게되면은 스왑이라는 함수를 정의해서 num1과 num2의 값을 swap하려는 코드를 작성해보았습니다. 하지만 결과로 봤을 때 전혀 스왑이 이러나지 않았죠? 그것은 함수의 매개변수 특성 때문입니다.

 

swap에 사용하는 매개변수는 어차피 지역변수의 특징을 가지고 있기에 main함수에 있는 변수를 직접 가져오지 못하고 그저 값만 복사하여 사용하는 것입니다. 

 

그렇기 때문에 스왑을 한다하여도 main() 함수에 있는 값은 그대로인 것입니다. 하지만! 이것을 포인터가 해결할 수 있습니다. 

 

매개 변수를 포인터 변수로 선언하여 swap() 함수를 사용할 때 num1과 num2의 주소를 전달받습니다.  그렇기 때문에 swap() 함수에서 

직접 해당 메모리 주소의 값을 변경할 수 있는 것입니다. !

 

또한 위에 설명드린 포인터는 1중 포인터입니다. 1중 포인터가 있다는 것은 더블 그리고 트리플 포인터까지도 있다는 것입니다.

위 사진처럼 더블포인터는 포인터를 가리키는 포인터이며, 트리플 포인터는 더블 포인터를 가리키는 포인터라고 생각하시면 되겠습니다. 

 

위의 1중,더블,트리플 포인터의 원리를 그림으로 설명드리자면 이렇습니다. 

 

이러한 원리를 파악하고 생각하며 접근하시면은 조금 더 쉽게 포인터를 마스터하실 수 있게 될겁니다. !!!!

 


다음 포스팅에서는 제가 그전 포스팅에서 배열과 포인터가 어떻게 밀접하게 관련이 되어있는지 포스팅 하도록 하겠습니다.!!

 

감사합니다.!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함