Pointer
02 Jan 2019 | DataStructure포인터란 다른 변수의 메모리 공간주소를 가리키는 변수를 가리킵니다. 포인터는 C, C++등과 같은 언어에서는 프로그래머가 직접 제어할 수 있고, 파이썬 등과 같은 언어에서는 완전히 숨겨져 사용할 수 없습니다. 하지만 프로그래머가 사용할 수 없다고해서 해당 언어에서 포인터가 전혀 쓰이지 않는 건 아니어서 그 개념을 알고 있을 필요가 있습니다.이 글은 'ratsgo's blog'에서 가져왔으며 추가적인 설명을 넣어 개념을 적립하려한다.
예시
포인터를 명시적으로 다룰 수 있는 C언어에서 아래와 같은 코드로 예시를 듭니다.
int i, *pi, **ppi;
i = 5;
pi = &i;
ppi = &'pi';
위 코드를 그림으로 나타내면 다음과 같습니다.
<내용>
$i, pi, ppi$가 가리키는 메모리 주소와 그 실제값은 다음과 같습니다.Variable | Address | Value |
---|---|---|
$i$ | 100 | 5 |
$pi$ | 104 | 100 |
$ppi$ | 108 | 104 |
Usage | Meaning | Value |
---|---|---|
$pi$ | $i$의 주소 | 100 |
$*pi$ | $i$의 실제값 | 5 |
$\&pi$ | $pi$의 주소 | 104 |
$ppi$ | $pi$의 주소 | 104 |
$*ppi$ | $pi$의 실제값=$i$의 주소 | 100 |
$**ppi$ | $i$의 실제값 | 5 |
<내용>
추가적인 예시로 위와 같은 그림을 제시한다. 지역변수 num은 스택영역에 할당되고, 포인터 변수 p는 힙 영역에 할당되었습니다. 지역 변수 num의 주소 값은 출력할 때마다 매번 다른 값을 출력하게됩니다. 컴퓨터의 메모리 RAM(Random Access Meomory)가 접근이 임의기 때문입니다,