포인터와 배열은 아주 밀접한 관계가 있다. 말로 하는 것 보다 예시로 보는 게 더 이해가 빠르다.
#include <stdio.h>
int main(void)
{
int a[]={10, 20, 30, 40};
printf("&a[0]=%d\n" , &a[0]);
printf("&a[0]=%d\n" , &a[1]);
printf("&a[0]=%d\n" , &a[2]);
printf("a=%d\n",a);
return 0;
}
위의 코드에서 배열의 값이 출력되는 것이 아니고 배열의 값의 주소가 출력된다. 여기서 꼭 알아야할 것은 배열 이름을 주소형식으로 출력하면 첫 번째 원소의 주소값과 완전히 동일 하다는 것을 알 수 있다. &a[0]=a
배열 이름이 첫 번째 요소의 주소와 같기 때문에 배열 이름은 배열의 첫 번째 요소를 가리키는 포인터처럼 사용할 수 있다. 포인터에 간접 참조 연산자 (*)를 사용하면 포인터가 가리키는 곳의 값을 알 수 있는 것이다.
#include <stdio.h>
int main(void){
int a[]={10,20,30,40};
printf("a=%u\n",a);
printf("a=%u\n",(a+1));
printf("a=%u\n",(a+2));
return 0;
}
이 코드의 출력은 예상과 같이 10, 20, 30이 출력된다.
반대로,
맞다.
#include <stdio.h>
int main(void){
int a[]={10,20,30,40};
int *p;
p=a;
printf("a[0]=%d a[1]=%d a[2]=%d \n",a[0],a[1],a[2]);
printf("p[0]=%d p[1]=%d p[2]=%d \n",p[0],p[1],p[2]);
return 0;
}
이 출력 두 문장은 동일하게 10,20,30이 출력된다.