앞에서 포인터를 사용하여 배열 원소를 가리키는 것을 다루었다. 10주차 강의에서 다루었듯이, 포인터에 간접 주소 연산자 *를 적용한 결과는 기억공간 그 자체인 lvalue이다.

포인터 p가 배열 원소 a[i]를 가리킨다면, *p는 p가 가리키는 곳의 기억공간이며, 이 기억공간의 이름은 a[i]이다. 따라서 *p와 a[i]는 동일하다.

다음은 2장에서 다룬 포인터 산술을 이용하여 배열 원소와 포인터와의 관계를 보여준다. p가 a를 가리킬 때, *p는 a[0]와 동일하고, *(p+1)은 a[1]과 동일하고, 이와 같은 방식으로 *(p+4)는 a[4]와 동일하다.



다음에서 여러분은 0부터 4사이의 정수 k를 선택하여 *(p+k)의 식을 형성하고, 이 식을 평가한다.



포인터 p가 배열 a의 시작 주소를 가리킨다면, a[k]와 *(p+k)는 동일한 기억공간의 이름을 나타낸다. 따라서 a[k]가 단순 변수로 사용되듯이, *(p+k)도 a[k]와 동일한 의미로 단순 변수로 사용될 수 있다.

다음 2개의 프로그램 코드를 생각해보자.

 

코드 1과 코드 2는 정확하게 동일한 의미를 갖는다. 즉, *(p+3)은 a[3]과 동일하며, *(p+1)은 a[1]과 동일하다. 따라서 코드 1과 코드 2의 printf() 문이 출력하는 결과는 동일하다.

다음 두 프로그램을 생각해보자.

 

위의 두 개의 프로그램 모두 동일한 결과를 출력한다. 프로그램 12-1-b의 for 문 본체에 표현된 *(p+i)는 프로그램 12-1-a의 a[i]와 동일한 표현이다.

 

아래의 실습창을 이용하여 프로그램 12-1-a 와 프로그램 12-1-b를 실습한다.
 

 

다음에서 여러분이 직접 포인터 산술 식을 형성하고, 그 식을 평가한다.


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