설탕중독 2022. 6. 2. 20:23

배열

배열이란?

연관된 데이터를 하나의 그룹으로써 관리하기 위해 사용되는 데이터 타입이다.

 

1-0 코드
1-1 메모리

 

1-0 코드 이미지를 보면 구조체를 이용해서 3가지 변수를 선언하고 초기값을 지정해주었다.

선언한 구조체 타입으로 10의 크기를 가지는 배열을 선언하였다.

그리고 메모리를 열어봐서 선언된 배열이 어떻게 메모리에 저장되는지 확인해보았다.

선언된 배열은 1-1 이미지와 같이 특정 공간에 10의 크기만큼 할당되어 저장되는 것을 확인할 수 있다.

 

여기서 중요한 것은 배열의 [이름]은 일반 변수의 [이름]과 다르다.

일반 변수의 이름은 특정 공간의 이름이었지만 

배열의 이름은 배열의 시작 주소를 의미한다.

즉 1-0 코드에서 monsters 자체가 monsters 배열의 시작 위치를 가리키는 포인터와 같다

 

 

2-0 코드
2-1 결과

 

2-0 코드 이미지를 보면 monsters 자체가 배열의 시작 주소이기 때문에 포인터로 선언한 변수에 넣어서

사용이 가능하다. monsters 안에 있는 두 번째 배열 공간으로 접근하기 위해 + 1 연산을 해주었다.

 

포인터에 사용이 가능하기 때문에 당연히 참조에도 사용이 가능하다.

 

 

3-0 코드
3-1 결과

 

이번에는 참조를 사용하여 배열의 값을 수정했다.

배열의 세 번째 공간으로 이동하기 위해 + 2 연산을 해주었고 

포인터일 때는 주소 값을 넣어주면 됐지만 참조는 주소 값이 아닌 주소 안으로 이동해서 

별칭을 붙여줘야 하므로 연산 결과에 포인터를 붙여줬다. 

 

하지만 참조는 3-0의 방식보다 좀 더 가독성이 좋게 수정할 수 있다.

 

3-2 코드

 

참조이기 때문에 주소 값이 아닌 원본 데이터를 넣어주어야 하고 

인덱스를 이용해서 쉽게 표현할 수 있다. 

즉 monsters[2] == *(monsters + 2)이라는 소리이다.

 


 

내용 추가

 

+ 배열을 함수의 인자로 넘기면 컴파일러가 자동으로 포인터로 치환한다.

+ 배열의 크기를 지정해줄 때는 항상 상수값만 가능하다.