본문 바로가기
C++/배열

[C++] 배열이란 무엇인가

by bigpicture 2022. 8. 12.
반응형

배열은 자료형을 담는 자료구조입니다. 쉽게 이해하려면 표를 떠올리시면 됩니다. 자료를 표로 정리해 놓으면 한눈에 보기 좋은 것처럼 자료를 배열 형태로 저장해 놓으면 관리가 편합니다. 2차원 배열이 표와 비슷하며 2차원 외에도 모든 차원의 배열이 정의될 수 있습니다. 

코딩에서 등장하는 모든 것은 필요에 의해 정의된 것입니다. 배열이 없는 것보다 있는 것이 편리하기 때문에 배열을 정의해서 사용합니다. 

 

배열 정의하는 방법

배열은 아래와 같이 정의합니다. 

자료형 배열이름[원소개수] = {원소1,원소2,...};


원소가 1,2,3인 배열 a를 정의하면 아래와 같습니다. 

int a[3]={1,2,3};

 

배열에서 이름이 갖는 의미

위에서 정의한 배열을 한번 출력 해볼까요? 아마 아래와 같이 출력하려고 할 것입니다. 

cout<<a<<endl;


결과는 아래와 같습니다. 

0x7ffefc532b6c

주소가 출력됐습니다. 배열의 이름이 어떤 의미인지를 알 수 있는 대목입니다. 배열의 이름은 주소값을 갖는 포인터입니다. 배열이 저장된 메모리 중에서 첫번째 위치의 주소입니다. 배열 a로 예를 들면 {1,2,3} 에서 1이 저장된 주소입니다. 더 정확이 이야기하면 1이 저장된 4바이트 중 첫 바이트의 주소입니다. 아래 두 코드의 출력결과가 같습니다. 

 

cout<<a<<endl;
cout<<&a[0]<<endl;

 

따라서 아래와 같은 정의는 불가능합니다. 

int a[3]={1,2,3};
int b[3]=a;


a가 {1,2,3}이라는 배열을 의미하지 않기 때문입니다. 그렇다면 아래와 같은 정의는 가능할까요? 

int a[3]={1,2,3};
int b[3]=a[3];


이것도 안됩니다. a[3] 도 배열 {1,2,3} 을 의미하지 않기 때문입니다. 

 

배열 인덱싱

a[0] 은 배열 a의 첫번째 원소입니다. a[1]은 두번째 원소이고 a[2]는 세번째 원소입니다. a[3]은 존재하지 않습니다. 

배열을 정의할 때 a[3]은 세개의 원소를 갖는 배열 a를 의미하지만, 이미 정의된 배열에서 a[3]은 a의 네번째 원소라는 뜻입니다. 

 

아래 출력결과는 무엇일까요? 

 

int a[3]={1,2,3};

cout<<a[2]<<endl;

 

a[2]는 a의 세번째 요소이므로 3이 출력됩니다. 

 

배열이름과 포인터의 차이

배열 이름은 배열 첫 원소 주소를 가리키는 포인터입니다. 하지만 일반적으로 정의하는 포인터와는 한가지 차이가 있는데요. 포인터에 입력된 값을 변경할 수 없다는 것입니다. 이와 같이 값 변경이 불가능한 포인터를 상수 형태의 포인터 라고 합니다. 

 

2차원 배열

위에서 정의한 배열 a는 숫자를 일렬로 나열한 배열이었습니다. 숫자를 행렬 형태로 나열할 수도 있는데 이러한 배열을 2차원 배열이라고 합니다. 

아래와 같은 행렬을 배열로 정의해봅시다.

1 2 3
4 5 6

2행 3열입니다. 배열로는 아래와 같이 정의합니다. 

int a[2][3]={{1,2,3},{4,5,6}};


같은 규칙으로 더 높은 차원의 배열도 정의할 수 있습니다. 3차원 배열은 행렬이 높이 방향으로 쌓인 형태를 상상하시면 됩니다. 

반응형

'C++ > 배열' 카테고리의 다른 글

[C++] 배열 이름으로 인덱싱이 가능하다는 것의 의미  (0) 2022.08.12

댓글