1. 포인터 선언

포인터 변수도 C의 다른 변수와 마찬가지로 사용되기 전에 반드시 선언되어야 한다. 다음은 포인터 선언문의 일반 형식이다.

여기서 기본-타입은 포인터가 가리키는 값의 타입이고, 포인터-변수는 선언되고 있는 변수이다.

포인터가 가리키는 곳은 값이 저장될 수 있는 lvalue이며, 이것은 변수이다. 따라서 기본-타입은 이 변수의 타입으로 생각할 수 있다. 즉, 포인터가 가리키는 곳에 저장된 값의 타입이 된다.

다음은 포인터 선언의 예이다

    int *p;

p는 int 타입의 변수를 가리키는 포인터로 선언된다. 즉, p에는 int 타입의 변수의 주소가 저장될 것이고, p가 가리키는 곳에는 int 값이 저장된다.


p의 타입 명은 ‘pointer-to-int'이며, 보통 ‘integer에 대한 포인터(pointer to integer)’로 읽는다.


다음은 포인터 변수 선언의 다른 예제이다.

    char *pc;

float *pf;

double *pd;
    문자에 대한 포인터

float에 대한 포인터

double에 대한 포인터

포인터 변수 pc와 pf는 모두 주소 값을 갖는다는 점에서는 일치하지만, 이 포인터가 가리키고 있는 곳에 저장된 값의 타입이 다르다. 즉, pc가 가리키는 곳의 값은 문자임에 반해서, pf가 가리키는 곳은 float 타입이 실수이다.

여러분이 한 선언문에 두 개 이상의 포인터를 선언할 경우에, 각 포인터에 *를 붙일 필요가 있다.

    int *p1, *p2;

만약, 여러분이 다음과 같이 p1, p2를 선언한다면,

    int *p1, p2;

p1만이 포인터 변수이고, p는 단순 변수로 인식된다.

[문장 단위 입력 실행] 여러분은 다음 실습창에서 C 프로그램을 한 문장씩 입력하여 실행시켜  볼 수 있다. 새로운 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오.         

 ( 실습 도움말)


2. 포인터의 사용 예

포인터와 관련된 &, * 연산자를 사용하여 포인터의 사용 예를 보인다. 다음 프로그램에는 두 개의 단순 변수, a, b와 두 개의 포인터 변수 p1, p2를 선언한다.



메모리의 주소는 바이트 단위로 부여된다. int 타입의 값이 4바이트 기억공간에 표현되므로, a의 주소가 1000이면, b의 주소는 1004가 된다.

윈도 운영체제에서 동작하는 여러분의 컴퓨터에서 주소 값은 4 바이트 기억공간에 표현된다. 이러한 가정하에서, p1, p2의 주소는 각각 1008, 1012가 된다.

프로그램에 변수, a, b에 값을 배정하는 배정문을 다음과 같이 추가한다.

다음에, & 주소 연산자를 사용하여 p1, p2에 a, b의 주소 값을 배정한다.


이제 *의 간접 참조연산자를 사용하여 p1, p2가 가리키고 있는 곳의 값에 접근한다. 먼저, p1이 가리키고 있는 곳의 값을 가져와서 b에 저장한다.


다음에 p2가 가리키고 있는 곳에 값 20을 배정한다. 2.3절에서 설명하였듯이, *p2의 연산 결과는 lvalue이므로, 이 곳에 값이 배정될 수 있음을 유의하라.


위 배정문의 수행 결과로, p2의 값 자체는 변화가 없음을 유의하라. 따라서 p2는 여전히 변수 a를 가리킨다.

포인터 변수가 가리키고 있는 곳의 값을 다른 포인터 변수가 가리키고 있는 곳에 저장하는 것이 가능하다. 다음은 p2가 가리키고 있는 곳의 값을 가져와서 p1이 가리키는 곳에 저장한다.


먼저, p2가 가리키는 곳에서 값 20을 가져온다. 다음에, 가져온 값을 p1이 가리키는 곳에 저장한다.

위의 배정문은 p1, p2가 각각 a, b를 가리키므로, 다음 배정문의 실행 효과에 동일함을 알 수 있다.

    a = b;


포인터 변수에 새로운 값을 배정하는 것은 가능하다. 다음은 p1의 주소 값을 p2에 배정한다.

위 배정문의 수행 결과로, p2는 p1의 주소 값을 갖게 되고, 따라서 p2는 이제 변수 b 대신에 a를 가리키게 된다. 결과적으로, p1, p2는 동일한 변수 a를 가리킨다.

포인터 사용을 알아보기 위해서, 위에서 살펴본 문장들을 다시 한번 실행시켜 보면서 그 실행효과를 살펴본다.

프로그램 11-3의 마지막 두 문장을 눈여겨보라. p2가 가리키고 있는 곳의 값을 10으로 변경하고, p1이 가리키고 있는 곳의 값을 가져와서 출력한다.

마지막 두 번째 문장의 수행이 마지막번째 문장의 수행에 영향을 미친다는 것을 알 수 있다. 즉, p2가 가리키는 곳의 값을 변경하였으나, 이것은 p1이 가리키는 곳의 값도 변경한다. 이것은 p1이 가리키고 있는 곳과 p2가 가리키고 있는 곳이 같기 때문이다.

 

 

[프로그램 단위 입력 실행] 다음 실습창을 통해서 프로그램 11-3의 실행과정을 실습한다.

(여러분은 실습창의 왼편에 위치한 '새프로그램 입력' 버튼을 클릭하여 새로운 프로그램을 입력하여 실행시켜 볼 수 있다. )

 

 

[문장 단위 입력 실행] 여러분은 다음 실습창에서 C 프로그램을 한 문장씩 입력하여 실행시켜  볼 수 있다. 단순 변수와 포인터 변수를 적절히 선언 및 초기화하고, &와 * 연산자를 이용하여 포인터 변수의 사용을 포함한 새로운 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오.       ( 실습 도움말)

 


top으로... 이전페이지로.. home으로..