나는 포인터가 죽어도 안 외워졌다.
나는 포인터가 죽어도 안 외워졌다. C언어의 꽃이라고 불리는 포인터를 이해하기에 조금 오랜 시간이 걸렸다. 간단하게 생각하자.
일단 가볍게 짚고 넘어가자. 포인터(pointer)는 메모리 주소 '값'이다.
*
는 값이다.
&
는 주소값이다.
* (asterisk)
*
는 별표다. 별이 붙으면 특별해진다. 군대에서도 별을 달면 대우가 달라진다. 별을 달면 값
을 나타낸다.
num이 가지고 있는 5를 출력하고 싶다면 ptr라는 변수에 *
을 붙여서 *ptr
로 나타내면 된다.
그런데, 계급장을 때면, 이 녀석(ptr)은 주소값이 된다. 정말 그런지 ptr만 출력해보자.
계급장을 떄면, ptr
변수는 주소값을 가리킨다. 정확하게 말하면, num 변수의 메모리 주소값을 가리킨다. 즉, ptr은 정확히 &num
과 일치한다.
여기서 정리하고 가자. 포인터 변수
는 주소값을 담는다. 단, *
를 붙이면, 주소값이 가리키는 참조값(즉, 5)
가 된다.
& (ampersand)
&
가 붙으면 무조건 주소값이 된다. 포인터 변수는 무조건 주소값
을 담아야 한다. 따라서 특수한 기호 &
를 붙여줘야 한다. 이제 아래 그림을 이해하면 된다.
이 그림에서 생각해야 할 점은 왜 &ptr=0xB
냐는 것이다.
&기호는 주소값을 담는 연산자라고 했다. 따라서 &ptr
과 &num
의 주소는 서로 다른 것이다. 당연한 말이다.
포인터의 필요성
메모리 주소값을 담는 포인터가 왜 필요하는지에 대한 질문은 나도 진행중이다. 다만, 내가 아는선에서 간단하게 설명하고자 한다면 메모리를 정밀하게 컨트롤 하기 위함이 아닐까 생각하고 있다.
포인터의 필요성에 대해서는 게임프로그래머 김포프
씨의 말을 인용하고 싶다. 김포프씨의 말에 따르면, 포인터는 간접적 사고를 할 수 있는 일종의 논리력이라고 말씀하신다.
'프로그래밍' 카테고리의 다른 글
[C언어] 삼항연산자 활용하기 (1) | 2018.03.29 |
---|---|
정보처리기사 기출문제 정리 (0) | 2018.03.03 |
아스키(ASCII)코드와 유니코드(Unicode)의 이해 (4) | 2017.03.04 |