다음 예제 코드를 실행하여 배열의 인덱스가 0으로 시작해야 포인터 연산 및 배열의 주소 값 계산 시 표현의 통일성을 유지할 수 있음을 확인해 보세요.
pointer2_14.c
#include <stdio.h> main() { int a[] = { 1, 2, 3, 4, 5 }; printf("a[0] 값은 %d\n", a[0]); printf("a[0] 값은 %d\n", *a); printf("a[0] 주소 값은 %d\n", &a[0]); printf("a[0] 주소 값은 %d\n", a); printf("a[4] 값은 %d\n", a[4]); printf("a[4] 값은 %d\n", *(a + 4)); printf("a[4] 주소 값은 %d\n", &a[4]); printf("a[4] 주소 값은 %d\n", a + 4); }
실행 결과
a[0] 값은 1
a[0] 값은 1
a[0] 주소 값은 12122204
a[0] 주소 값은 12122204
a[4] 값은 5
a[4] 값은 5
a[4] 주소 값은 12122220
a[4] 주소 값은 12122220
배열의 인덱스 시작이 0부터 시작하므로 a[4]는 *(a + 4)와 같고, 배열의 인덱스 4의 값을 의미합니다. 또한 &a[4]는 a + 4와 같고 배열의 인덱스 네 번째 주소 값을 의미합니다.
한마디로 배열의 시작을 0으로 함에 따라 a[i]는 *(a + i)로 표현이 가능하며, &a[i]는 a + i로 표현이 가능합니다. 그리고 이를 통해 표현의 통일성이 이루어진다고 할 수 있습니다.