|
앞에서 포인터를 사용하여 배열 원소를 가리키는 것을 다루었다. 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]와 동일하다.
다음 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]와 동일한 표현이다.
|
|
||
다음에서 여러분이 직접 포인터 산술 식을 형성하고,
그 식을 평가한다. |
|
|