C언어 포인터와 배열
title: “C언어 포인터와 배열” categories:
-
C
#C언어 포인터와 배열 : 네이버 블로그
배열도 변수임으로 주소를 가지게 된다.
int a[10] 배열을 선언했을 때 &a[0]이100 이라고 하면
&a[1] = 104
&a[2] = 108
&a[3] = 112 로 4씩 올라가게 된다.
아래 예제를 보자
#include
int main() {
int a[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
int \*ap = &a[0]; //a[0]의 주소를 포인터변수 ap에 저장
printf("%u %u %u\n", a[0], a[1], a[2]);
printf("%u %u %u\n", \*(ap), \*(ap + 1), \*(ap + 2)); //ap, ap+1 , ap+2
}
위의 코드에서 가장 중요한 코드는
printf(“%u %u %u\n”, *(ap), *(ap + 1), *(ap + 2)); 이다
괄호 안에 있는 주소를 참조(*)하게 된다.
즉 괄호안의 주소를 불러오는 것이다.
그래서 &a[0]=*ap이고 *(ap)는 a[0]의 값이 된다.
그럼 *(ap+1)을 하면 어떻게 될까?
ap는 포인터 변수이므로 포인터 연산이 이루어지게 된다.
즉 +1이 int형이므로 +4가 된다.
배열은 자료형 크기 간격으로 메모리에 순서대로 저장된다
즉 int 형 a[0]이 100메모리에 저장되었다면 a[1]은 104에 저장된다.
중요한점은 포인터연산임으로 *(ap+1)으로 하는것이 실제 메모리의 +4가 되는것을 잊지 말아야 한다.
즉
a[0] a[1] a[2]는
*(ap) *(ap+1) *(ap+2)
이다. 비슷하지 않는가?
그렇다 배열의 이름은 포인터이다. 필자는 이 사실이 프로그래밍을 배우면서 받은 가장 큰 충격이였다.
배열이…배열의 이름이 포인터였다니…
함수의 인자로 배열로 쓸 때 배열의 값이 바뀌는 이유는 배열의 이름은 포인터니깐 포인터주소를 함수에 전달했던 것이다. 엌ㅋㅋ 개꿀잼
이것으로 C언어 포인터와 배열 포스팅을 마치겠다