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언어 포인터와 배열 포스팅을 마치겠다

업데이트: