프로그램을 작성하다 보면 유사한 내용을 저정하는 여러 개의 변수를 하나의 단위로 묶어 처리하는 것이 편리할 때가 있다. 이러한 경우 유용하게 사용할 수 있는 것이 배열(array)이다. 배열은 동일한 자료형의 값을 저장할 수 있는 공간을 여러 개 묶어 하나의 이름을 갖는 변수로 만들고, 각각의 원소를 첨자로 지정하는 것이다. 배열을 구성하는 원소의 자료형은 char, int 등과 같은 기본 자료형이나 구조체, 클래스 등 어느 것이어도 상관없다.
1차원 배열 ▶ n개의 원소를 저장하는 1차원 배열의 선언문은 다음과 같다.
TypeName arrName[n];
예를 들어 다음 문장은 float형의 값을 4개 저장할 수 있는 배열 fArray를 선언한 것이다.
float fArray[3];
이때 각각 이 문장의 예에서처럼 배영을 구성하는 원소의 수는 [ ] 안에 정수형 상수 또는 결과값이 정수 상수인 수식을 기입하여 지정한다. 배열의 첫 번째 원소는 0부터 시작한다.
배열을 선언할 때 { } 안에 배열의 값을 나열하면 그 값으로 배열잉 초기화된다. 만일 나열된 데이터의 수가 배열의 원소 수보다 적을 때는 나머지는 0이 채워진다.
int a[5] = {1,2,3,4,5}; // =는 생략할 수 있음
int b[5] = {1,2,3,}; // b[3], b[4]는 0으로 초기화
배열을 선언할 때 배열의 크기를 지정하지 않으면 초깃값으로 제공된 데이터의 수가 배열의 크기가 된다. 다음 문장은 5개의 int 값을 저장하는 배열을 선언한 문장이다.
int c[] = {1,2,3,4,5};
배열을 사용하면 프로그램을 훨씬 편리하게 작성할 수 있다. 다음은 10개의 변수에 저장된 값 중 가장 큰 값을 찾는 문장이다.
max = data0; // data0의 값을 max로 가정함
if(max < data1) max = data1; // max와 data1을 비교
if(max < data2) max = data2; // max와 data2을 비교
..... // data3 ~ data8을 같은 방법으로 비교
if(max < data9) max = data9; // max와 data9을 비교
각각의 변수들은 모두 개별적으로 이름을 지정하여 값을 사용해야 하기 때문에 이처럼 반복적으로 문장을 사용할 수 밖에 없다. 그러나 이 변수들을 data[10]이라는 배열로 모아 놓으면 간단히 작성할 수 있다.
#include <iostream>
using namespace std;
int main() {
int max;
int data[10]{ 10,23,5,9,22,48,12,10,55,31 };
max = data[0]; // data의 0번 값을 max로 가정함
cout << "데이터 : " << data[0]; // 0번 데이터 출력
for (int i = 1; i < 10; i++) { // 나머지 9개의 데이터 비교
cout << " " << data[i]; // i번 데이터 출력
if (max < data[i]) max = data[i]; // i번 데이터 비교
}
cout << "\n\n배열의 최댓값 : " << max << endl;
return 0;
}
========= 결과 ==========
데이터 : 10 23 5 9 22 48 12 10 55 31
배열의 최댓값 : 55
다차원 배열 ▶ 1차원 배열을 확장하면 2차원 배열이 된다. 즉, 각각의 원소가 1차원 배열이 2차원 배열이라고 생각하면 된다. 예를 들어
int Arr2D[4][3];
은 3개의 int 값을 저장하는 1차원 배열이 4개 모여 구성된 2차원 배열이다. 즉, Arr2D[0], Arr2D[1], Arr2D[2], Arr2D[3]은 각각 3개의 원소로 구성된 1차원 배열이며, 이 배열들을 연속적으로 모아 놓은 것이 배열 Arr2D[4][3]이다.
이러한 개녕을 확장하면 다차원 배열로 일반화할 수 있다. 즉, 1차원 배열이 원소인 배열을 2차원 배열, 2차원 배열이 원소인 배열을 3차원 배열, 3차원 배열이 원소인 배열을 4차원 배열이라고 한다.
'Programming Languages > C++' 카테고리의 다른 글
메모리 할당 및 반환 (0) | 2020.05.07 |
---|---|
포인터 (0) | 2020.05.06 |
클래스 (0) | 2020.04.29 |
구조체 (0) | 2020.04.23 |
흐름제어 구문 (0) | 2020.04.20 |