본문 바로가기

C, C++

배열의 주소

배열을 다음과 같이 선언했다고 해 보자.

unsigned char a[20];

이 때 a의 표현방식에 따라 주소값이 어떻게 변하는지 살펴보도록 하자.

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있다.

위 결과를 설명하면 다음과 같다. 

a의 값과 &a[0]의 값은 같다. 즉 배열 a의 첫 번째 element의 주소값을 a가 가지고 있다는 말이다. 

a의 값과 &a의 값은 같다. 기본적으로 배열 변수의 주소는 &a로 표현할 수 있는데, 이를 a로도 표현할 수 있도록 한 것이라고 볼 수 있다. 

함수로 배열 변수가 넘겨질 때는 어떨까? 다음의 함수를 살펴보자.

함수에서 인자로 받은 code의 값을 출력해 보았다. code의 값과 &code의 값이 다른 것을 알 수 있다. 반면에 함수를 호출하는 main에서는 code의 값과 &code의 값이 동일하다. 

함수 안에서 code의 값과 &code의 값이 다른 이유는 함수가 호출되면서 unsigned char *  타입의 local 변수를 만들고 이의 이름을 code라고 한 것이다. code의  크기는(sizeof(code)) 8바이트(64비트 machine)이다. 

code 변수 안에는 main의 code와 동일한 주소값이 들어가 있다. 하지만 &code, 즉 local 변수 code는 주소는 당연히 main의 것과 다르게 된다.