[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 |