앞에서 다룬 증감 연산자, ++, --는 포인터 산술에서 빈번히 사용된다. p가 포인터일 때, 다음 식은 C 프로그램에서 가장 일반적으로 사용되는 코드 유형이다.

    *p++

위 식의 의미는 무엇인가? 먼저, 포인터 변수 p에 두 개의 연산자 *와 ++가 적용되고 있다. 따라서 연산자 적용 순서를 결정해야 한다.

*와 ++는 단항 연산자로서, 그 연산자 우선순위가 동일하다. 그러나 식에 단항 연산자가 여러 개 포함될 경우에, 오른쪽에 위치한 연산자가 먼저 평가된다. 따라서 위의 식은 다음과 같다.

    *(p++)


p가 배열 원소 a[i]를 가리키고 있다면, 위 식의 의미는 다음과 같다.

식의 결과 값은 a[i]에 포함된 값이고, p는 다음번째 배열 원소 a[i+1]을 가리키게 된다.

*p++의 식 표현을 사용하여 프로그램 12-1-b를 다음과 같이 표현할 수 있다. 이 프로그램의 실행 결과는 프로그램 12-1-b와 동일하다.

 

포인터에 대한 증감 연산자 적용시에 다음의 식도 표현 가능하다. 여기서 p는 배열 원소 a[i]를 가리키고 있다고 가정한다.

 

*++p

*(++p)와 동일하며, 식 평가 후에 p는 a[i+1]을 가리키고, 식은 값은 a[i+1]에 포함된 값이다.      

 
*p--
*(p--)와 동일하며, 식 평가 후에 p는 a[i-1]을 가리키고, 식의 값은 a[i]에 포함된 값이다.

 

*--p

*(--p)와 동일하며, 식 평가 후에 p는 a[i-1]을 가리키고, 식은 값은 a[i-1]에 포함된 값이다.      

다음은 증감 연산자를 사용한 위의 포인터 산술 3가지 유형에 대해서 살펴본다.

 

다음은 위에서 다룬 증감 연산자를 사용한 네 가지 유형의 포인터 산술에 대해서 종합하여 실습한다.

포인터 연산은 배열에 대해서 유용하게 적용할 수 있다. 그러나 포인터 연산시에 연산 결과의 주소가 의미 있는 데이터를 가리키도록 주의해야 한다. 만약, 포인터 연산의 결과 주소가 배열 범위를 벗어난다면, 포인터는 의미 있는 데이터를 가리키지 않을 것이며, 따라서 포인터를 통한 참조는 전혀 엉뚱한 프로그램 결과를 초래할 것이다.


 

 

[프로그램 단위 입력 실행] 다음 실습창을 통해서 프로그램 코드 3의 실행과정을 알아본다

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

 

 

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

 

 


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