|
||||||
C 언어의 특징중의 하나는 배열 이름이 이 배열의 첫번째 원소에 대한 포인터와 같다는 것이다. 즉, 임의 배열 a에 대해서 다음 등식이 성립한다.
배열 선언 결과로, 배열 이름 a는 &a[0]와 동일하게 취급될 수 있다. 따라서 a는 포인터처럼 다루어질 수 있다. p가 포인터 변수이고, a[0]를 가리킬 때, 포인터 산술을 통해서 (p+k)는 a[k]를 가리킨다는 사실을 알고 있다. 마찬가지로, (a+k)는 a[k}를 가리키게 된다.
다음은 *(a+k)가 a[k]와 동일하다는 사실을
확인한다. k의 값을 달리하면서, *(a+k)의 식을 평가한다.
그렇다면, 프로그램 12-1-c도 다음과 같이 작성할 수 있는가?
여러분이 위 프로그램을 컴파일하려고 하면 오류가 발생할 것이다. 그 이유는 배열 이름은 포인터 변수가 아니고 포인터 상수이기 때문이다. 따라서 배열 이름에 다른 주소를 저장하는 것은 허용되지 않는다. *a++는 a에 포함된 주소 값을 1만큼 증가시키려고 할 것이다. 그러나 a는 상수이기 때문에, a에 포함된 주소 값을 변경하려는 시도는 허용되지 않는다.
따라서 그림 12-1-c는 다음과 같이 수정할 수 있다.
|
|
[프로그램 단위 입력 실행] 다음 실습창을 통해서 프로그램 코드 4의 실행과정을 알아본다 (여러분은 실습창의 왼편에 위치한 '새프로그램 입력' 버튼을 클릭하여 새로운 프로그램을 입력하여 실행시켜 볼 수 있다. ) |
|
[문장 단위 입력 실행] 여러분은 다음 실습창에서 C 프로그램을 한 문장씩 입력하여 실행시켜 볼 수 있다. 배열 이름을 통해서 새로운 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오. (실습 도움말) |
|
|
|