C언어 포인터와 배열 이해하기

박영욱·2023년 11월 16일
0

배열 이름은 배열의 주소와 같다!

포인터와 배열은 아주 밀접한 관계가 있다. 말로 하는 것 보다 예시로 보는 게 더 이해가 빠르다.

#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이 출력된다.

0개의 댓글

관련 채용 정보