자 이제 배열에 대해 알아보자
지금까지는 하나의 변수에 하나의 값만 저장하고 사용해 왔었다.
만약 30명의 학생의 점수를 저장해야 한다고 가정하면, 우리는 30개의 변수를 따로 생성해야 할 것이다.
이는 매우 비효율적인 코드가 될 것이다.
배열(array)는 같은 자료형의 데이터 들을 같은 이름의 변수에 저장할 수 있는 자료구조 이다.
따라서 많은 양의 데이터를 효율적으로 저장하고 처리하기 위해 사용된다.
배열은 어떻게 선언할까?
자료형 배열이름[크기] 의 형태로 선언하면 된다.
예를 들어 학생 5명의 점수를 저장하는 배열을 생성한다면
int score[5] 이렇게 생성하면 된다
int score[5]는 score[0], score[1], score[2], score[3], score[4] 총 5개로 구성되어 있다.
그리고 배열의 번호를 사용하여 각 요소(score[0~4])에 접근한다
여기서 각 요소에 해당하는 번호를 index라고 부르는데, score[1]이 아닌 score[0]부터 시작한 이유가 뭘까?
배열의 index는 항상 0부터 시작하기 때문이다.
그러면 배열에 값을 한번 대입해보자

각 배열의 요소에 10, 20, 30을 대입하였다. 만약 arr[3]에 값을 대입하려고 하면 에러가 발생한다.
그 이유는 유효한 index는 0~2까지 밖에 없고, arr[3]은 존재하지 않기 때문이다.
이런 오류를 배열 범위 초과(out of bounds)라고 한다.
변수와 마찬가지로 배열도 선언과 동시에 초기화를 할 수 있다.

배열 초기화는 중괄호를 사용하여 값을 지정해주며 기본적으로 index가 0인 지점부터 수정된다.
초기화 되지 않은 나머지 값들은 전부 0으로 초기화 된다.
만약 값을 전부 초기화를 하지 않는다면 쓰레기 값이 나온다
배열의 크기를 직접 지정해 주지 않아도 되는데, 이러면 배열의 크기가 자동으로 지정된다

배열을 한번 출력해보자

int형 배열이므로 정수 형식 지정자를 사용하여 각 요소를 출력하면 된다.

코드를 실행해보면 배열의 요소들이 정상적으로 출력된 것을 확인할 수 있다.
하지만 이 코드를 보면 배웠던 것들 중 하나를 사용하고 싶지 않은가?
맞다. 바로 for문이다.
배열은 실제로 반복문과 함께 자주 사용된다

코드가 길면 길어질수록 반복문의 필요성이 매우 느껴질 것이다.
추가로 배열의 특징은 메모리에 연속적으로 저장된다는 것이다. (메모리의 공간이 이어져있다)
배열이 int형이라면 배열 한 원소당 4바이트의 크기를 가지고 있고, 배열은 메모리 주소가 연속적이므로 주소는 4씩 증가한다
저장되는 위치는 4바이트씩이지만, c언어에서는 주소를 나타낼 때 시작번지만을 나타낸다. 시작번지와 자료형만 알면 끝이 어디인지는 금방계산할 수 있기 때문이다.
| 메모리 주소(번지) | 1000(시작주소)~1003(끝주소) | 1004(시작주소) ~1007(끝주소) | 1008(시작주소)~1011(끝주소) |
| index값 | 0 | 1 | 2 |
int배열은 시작 주소가 4씩 증가, char 배열의 경우 1씩, double 배열의 경우 8씩 증가한다.
(즉 연속된 각 원소끼리의 주소는 자료형의 크기만큼 차이난다)
그래서 배열의 이름은 배열의 첫 번째 요소의 주소를 의미한다
int arr[5] = {10, 20, 30, 40, 50}; 로 배열을 선언했던 부분에서 arr은 배열 전체를 의미하는 것이 아니라 첫 번째 주소 즉, arr[0]의 주소를 나타낸다.
arr == &arr[0] 과 같다
한번 주소를 출력해보자

C언어 기초-7 <형식 지정자> 글에서 배웠듯이 %p는 주소를 나타낼 때 사용하는 형식 지정자이다.
printf( )함수를 이용해서 배열 arr의 주소와 index가 0인 arr[0]의 주소를 비교해보자

완전히 주소가 동일한 것을 확인할 수 있다.
scanf( ) 함수를 사용하여 배열에 값을 입력할 때도 일반 변수와 마찬가지로 &를 붙여 사용하면 된다

scanf( )를 사용하여 index가 1인 arr[1]의 값을 사용자가 입력하도록 하고 바뀐 요소들을 출력하도록 코드를 작성했다

코드를 실행하면 기존 요소 10, 20, 30에서 사용자가 입력한 수로 변경된 것을 알 수 있다.
VR게임 개발을 위한 언리얼엔진/C++ 공부한 내용 끄적이기...
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!