본문 바로가기

IT/C언어

[C언어] 1차원 배열의 주소와 값의 참조

[C언어] 1차원 배열의 주소와 값의 참조







안녕하세요 지토우에요~

이번엔  1차원 배열의 주소와 값의 참조에 대해 공부해봅시다.





1. &는 주소를 참조하는 연산자


우선, &에 대해 약간의 설명을 해드리겠습니다.

&는 엠퍼센트라고 읽습니다.

and를 대신하는 타이포그래픽 부호라고는 하는데,

보통 c언어에서는 주소연산자라고 기억하시면 됩니다.


&를 사용하면 메모리 공간의 주소를 표현할 수 있는데요.

다음 표를 봐주세요.


 

변수의 주소 참조 

배열의 주소 참조 

사용법 

&변수 이름 

&배열 요소 

ex) 

int a=10;

printf("%x \n", &a) // a의 주소 

int array[2]={10,2}

printf("%x \n", &array[0]); // array[0]의 주소

printf("%x \n", &array[1]); // array[1]의 주소





배열에서도 &연산자를 이용해 할당된 메모리 공간의 주소를 알 수 있습니다.

다음의 예를 봅시다.



7행에서 배열 요소 앞에 & 연산자를 붙여 배열에 할당된 메모리 공간의 주소들을 출력하는데요.

주소는 21f80c, 21f810, 21f814와 같이 숫자 상수입니다.

array1 배열의 요소들은 연속된 메모리 공간, int 형을 가지므로 4 바이트씩 차이가 나면서 커지는데요.

주소를 나타내는 숫자 상수는 운영체제나 개발 도구에 따라 다르답니다.









2. 배열 이름 = 배열의 시작 주소


배열 이름은 배열에 할당된 메모리 공간의 시작 주소입니다.

예를 들어 int array[3]과 같이 선언되어 있다면 어떻게 될까요?

배열 이름 array는 배열의 시작 주소가 됩니다.

예를 들어 array+0, array+1, array+2 와 같이 배열의 시작 주소를 기준으로 배열 요소들의 개별 주소를 참조합니다.





4행에서 int array[3]으로 배열을 선언했습니다.

6행에서 array+0에서 +0을 생략하면 배열 이름 array가 됩니다.

array는 int형 (4바이트)의 자료형을 갖고 있으므로

array+1은 배열의 시작 주소에서 4바이트를 건너뛴 주소를 의미합니다.

array+2는 배열의 시작 주소에서 8바이트 건너 뛴 주소겠지요?





3. *는 메모리 공간에 저장된 값을 참조하는 연산자


&연산자로 메모리 공간의 주소를 표현하는 방법을 배웠습니다.

이번에는 * 연산자로 메모리 공간에 저장된 값을 참조하는 방법을 배워볼까요?

메로리 공간에 저장된 값을 참조하려면 * 연산자를 사용해야 하는데요.


다음 표를 봐주세요!


 

변수의 값 참조 

배열 요소의 값 참조 

사용법 

*&변수 이름 

*&배열 요소 

ex) 

int a=10;

printf("%d \n", *&a); // a의 값 

int array[2]={3,4};

printf("%d \n", *&array[0]); // array[0]의 값

printf("%d \n", *&array[1]); // array[1]의 값



이제 예제를 봅시다.



6행에서 & 연산자로 배열의 요소들의 개별 주소를 출력했습니다.

7행에서 * 연산자로 배열의 요소들의 개별 주소를 통해 값에 접근합니다.

*연산자는 메모리 공간에 저장된 값을 참조하는 연산자이지요.


6행에서는 16진수 주소를 출력하겠고

7,8,9 행에서는 10진수 값을 출력합니다.

아래는 결과입니다.







'IT > C언어' 카테고리의 다른 글

[C언어] 포인터 변수의 선언  (3) 2017.08.11
[C언어] 포인터 이해하기  (3) 2017.08.10
[C언어] 배열 선언 시 주의할 점  (0) 2017.08.07
[C언어] 배열에 데이터 저장하기  (0) 2017.08.04
[C언어] 1차원 배열 (1)  (0) 2017.08.04