포인터의 개념

포인터를 이용하여 메모리에 접근하는 방법은 C 프로그래밍에서 매우 유용하게 사용된다.

 

변수의 값과 주소

변수는 메모리의 이름으로 설명되었다. 컴파일러가 변수에 메모리를 할당하고 할당된 메모리와 변수를 연결해 준다.

 

다음의 예제를 통해 변수의 주소에 대하여 알아보자

예제

#include <stdio.h>

int main()
{
        int num;
        num = 25;
        printf( "the Value of num : %d\n",num);
        printf( "the Adress of num : %p\n",&num);
        return 0;
}

 

 

 

pointer01.png

 

int num;

변수의 선언으로 변수 num에 int형이므로 4바이트의 공간이 할당되고, 25로 값이 초기화 되었다.

변수가 선언되면 컴파일러는 심벌테이블이라는 변수의 목록을 만든다.

 

pointer02.png

 

심벌테이블에는 변수이름과 자료형, 그리고 이 변수가 할당받은 메모리의 주소가 기록된다.

변수가 선언된 직후에는 변수가 무슨 값을 가지고 있느지 알 수 없기 때문에 미정값 으로 부른다.

num = 25;

변수 num을 초기화 시킴으로 변수의 메모리에 25라는 값이 들어가게 된다.

 

pointer03.png

 

printf 문에서 변수 앞에 붙은 &(ampersand)는 주소연산자 이다. 형식지정자 %p는 주소를 출력할 때 사용한다. 주소 값은 항상 16진수로 출력된다. 이 출력문으로 변수의 주소가

BF9AAF9C 라는 것을 알 수 있다.

변수가 할당받은 메모리의 위치는 이 함수의 실행이 끝날 때까지 변하지 않는다. 여기서 변수의 주소값 BF9AAF9C 은 정해진 값이 아니라 프로그램 실행시 할당되는 메모리의 주소이기 때문에 매번 실행 때마다 값이 달라질 수 있다.