배열을 다음과 같이 선언했다고 해 보자.
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의 것과 다르게 된다.
'C, C++' 카테고리의 다른 글
주어진 길이의 문자열 값을 얻어오는 함수 정의 방식 (0) | 2022.02.07 |
---|---|
C++ 표준의 버전 (0) | 2022.02.07 |
C 표준 (ANSI C, ISO C, Standard C)의 버전 (0) | 2022.02.07 |
strcpy, strncpy 대신에 (0) | 2022.02.07 |