본문 바로가기

Programming Languages/C++

배열

프로그램을 작성하다 보면 유사한 내용을 저정하는 여러 개의 변수를 하나의 단위로 묶어 처리하는 것이 편리할 때가 있다. 이러한 경우 유용하게 사용할 수 있는 것이 배열(array)이다. 배열은 동일한 자료형의 값을 저장할 수 있는 공간을 여러 개 묶어 하나의 이름을 갖는 변수로 만들고, 각각의 원소를 첨자로 지정하는 것이다. 배열을 구성하는 원소의 자료형은 char, int 등과 같은 기본 자료형이나 구조체, 클래스 등 어느 것이어도 상관없다.

1차원 배열 ▶ n개의 원소를 저장하는 1차원 배열의 선언문은 다음과 같다.

TypeName arrName[n];

예를 들어 다음 문장은 float형의 값을 4개 저장할 수 있는 배열 fArray를 선언한 것이다.

float fArray[3];

이때 각각 이 문장의 예에서처럼 배영을 구성하는 원소의 수는 [ ] 안에 정수형 상수 또는 결과값이 정수 상수인 수식을 기입하여 지정한다. 배열의 첫 번째 원소는 0부터 시작한다.

float fArray[3]은 3개의 float 값을 저장하는 배열이며, fArray는 배열 전체의 시작 주소를 나타낸다.

배열을 선언할 때 { } 안에 배열의 값을 나열하면 그 값으로 배열잉 초기화된다. 만일 나열된 데이터의 수가 배열의 원소 수보다 적을 때는 나머지는 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]이다.

int Arr2D[4][3]은 3개의 int값을 저장하는 1차원 배열 4개가 모인 것이며, Arr2D[i]는 i번째 1차원 배열의 시작 주소이다.

이러한 개녕을 확장하면 다차원 배열로 일반화할 수 있다. 즉, 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