포인터 사용법


포인터란 메모리상의 주소 값을 가리키는 변수이다.

이해하기 난해하며 사용하기도 참 어렵다. 

잘못 사용하면 프로그램이 종료되는 일도 발생할 수 있어 사용하는데 항상 주의를 기울여야 한다.

포인터를 이해 하려면 우선적으로 컴퓨터의 메모리 구조 이해가 필수적이며 

여러분의 이해를 돕고자 포인터의 low level 부터 설명 하도록 하겠다.



메모리 구조


포인터를 이해하려면 메모리 구조를 먼저 파악해야 된다. 

아래와 같이 빈 메모리 공간이 있다고 가정하자.

위의 메모리는 0x0001 ~ 0x0008 까지 주소를 가지고 있으며 각 주소당 1byte 데이터 공간을 가지고 있다.

이제 위의 메모리에 다음과 같이 변수를 선언했다고 가정하자.

 int value = 10;


이제 메모리가 어떻게 변했는지 살펴 보겠다.

int는 4byte의 공간을 차지 하기 때문에 0x0001~0x0004까지 공간을 value가 할당하여 쓰고 있으며 값은 10이 저장된다.

그렇다면 위에서 할당받은 value의 시작 주소는 무엇일까?

value의 시작 주소는 위의 그림에서 보면 0x0001인 것을 알 수 있다.

그러므로 value의 시작 주소는 0x0001이며 이것을 표현하는 것은 &value 라 한다.


 int value = 10;

 printf("&value: %d \n", &value ); //는 0x0001이 출력 된다.
 // 여기서 주의할 점은 위의 메모리 구조를 가정하에 0x0001이라는 것이다. 매번 수행 할 때마다 주소값은 항상 변한다.


자 이제 포인터 변수를 하나 선언 하도록 하겠다.

포인터 표현 방식은 변수명에 *을 하나 붙여 주면 되며 포인터는 항상 주소 값만 갖는다.

또한 포인터는 4byte만 할당 받도록 되어 있다.


 int value = 10;

 int* pValue = &value;

위와 같이 pValue에는 value의 주소값인 0x0001이 할당 된다.

아래의 결과는 어떻게 될까?


 printf("pValue[%d] *pValue[%d] \n", pValue, *pValue ); 


pValue -> 주소 값
*pValue -> 해당 주소가 가리키는 값


결과는 pValue 주소 값이므로 0x0001이며 *pValue는 주소를 가리키는 변수의 값 즉 value의 값인 10을 나타낸다. 



전체 예제는 다음과 같습니다.



#include <stdio.h>


int main()

{

int nValue = 10;

int* pValue = &nValue;

        printf("pValue[%d] *pValue[%d] \n", pValue, *pValue ); 

return 0;

}



반응형

'프로그램 > C' 카테고리의 다른 글

[C] 시간차이 구하기 ( millisecond 까지.. )  (0) 2017.07.16
[C] 포인터 자료형  (0) 2017.07.13
[C] 배열 사용법  (0) 2017.03.22
[C] goto 제어문 사용법  (0) 2017.03.18
[C]switch 제어문 사용법  (0) 2017.03.17

+ Recent posts