본문 바로가기
C++/기초

C++ 기초 : 배열

글: 시플마 2024. 3. 2.

int형 변수를 하나 선언하면 4Byte의 공간을 할당하죠.

다른 공간을 할당하려면 다른 이름으로 다른 변수를 선언해 줘야겠죠.

 

그런데 같은 이름으로 여러 개의 공간을 할당할 수 있는데

이를 배열이라고 합니다.

 

 


 

 

배열의 문법을 살펴봅시다.

int iArray[10] = { };


int형으로 배열을 선언하였습니다.

 

이름은 iArray이며 10개의 공간을 할당하고 있습니다.

해당 공간들은 모두 연속적으로 붙어 있습니다.

 

각 공간마다 특정 값을 넣어서 초기화할 수도 있지만

위 코드처럼 아무 값도 넣지 않으면

모든 공간을 0으로 초기화한다는 의미입니다.

 

만약 6개만 초기화하면 나머지 4개 공간은 0으로 초기화합니다.

 

 

 


 

 

 

각 공간에 접근하려면

int iArray[10] = { };

iArray[5] = 10;

 

접근하고자 하는 공간의 번호를 입력하여 접근할 수 있습니다.

위 코드대로라면 iArray라는 배열의 6번째 공간에 10을 대입하라는 의미이죠.

 

여기서 "왜 5를 입력하였는데 6번째 공간에 10을 대입하지?"라는 의문점이 생깁니다.

 

접근할 때 대괄호 안에 넣는 숫자는

'몇 번째'라는 개념이 아니고 '인덱스'의 개념이기 때문입니다.

첫 번째 공간에 접근하고 싶으면 iArray[0]을 입력하여 접근해야 하죠.

 

즉 처음 선언할 때 대괄호 안에 10을 넣어서 10개의 공간을 할당하면

접근할 때 대괄호 안에 넣을 수 있는 숫자는 0 ~ 9까지입니다.

총 10개의 공간에 접근할 수 있는 건 맞지만

0부터 세기 때문에 신경 써서 사용해야 합니다.

 

 


 

 

아래 코드처럼 배열의 범위를 초과하여

접근하려고 하면 오류가 발생합니다.

 

 

 

배열 iArray은 메모리 공간에서 아래와 같은 상황입니다.

 

 

위 그림과 같은 상황에서 iArray[10] = 10; 이라는 코드를 만나면

선언하지 않은 공간에 값을 넣으려고 하면서 오류가 발생하는 것이죠.

 

 

 

 


 

 

 

 

배열의 범위를 초과하여 접근했는데

컴파일러에서 오류로 인식하고

알아차리면 그나마 다행이지만,

이를 컴파일러에서 잡아 주지

못하는 경우 큰 문제가 발생합니다.

 

예를 들어 아래와 같은 코드가 있다고 합시다.

 

main 함수 스택에는 int형 변수 iData와

int형 배열 iArray[10]이 있습니다.

 

그리고 배열 iArray이 접근할 수 있는

최대 공간인 iArray[9]에서 두 칸이나

넘은 iArray[11]이라는 공간에 10을 대입하고 있죠.

 

근데 우연히 변수 iData이 할당하고 있는

메모리의 주소가 이와 일치해서

변수 iData에 10이 대입될 수 있습니다.

 

 

 

만약 코드가 3000줄이 넘는

훨씬 복잡한 프로그램이라고 가정해 봅시다.

 

의도하지 않은 값이 변수 iData에

대입되어 프로그램에 문제가 발생하는데

전혀 상관없는 배열 iArray가 원인이므로

오류 찾기가 쉽지 않을 것입니다.

 

현재 코드에서는 직접 숫자를 넣어

접근하므로 실수할 일이 잘 없지만,

 

수식을 계산하는 변수를 선언하고

숫자 대신에 변수를 넣어 인덱스에

접근하면 실수 확률이 높아지므로 조심해야 합니다.

 

 

 

 

강의 출처 : https://www.youtube.com/watch?v=PFc4g8mxOiI&list=PL4SIC1d_ab-aOxWPucn31NHkQvNPHK1D1&pp=iAQB

 


 

 

 

'C++ > 기초' 카테고리의 다른 글

C++ 기초 : 지역 변수 / 전역 변수  (0) 2024.03.05
C++ 기초 : 구조체  (0) 2024.03.03
C++ 기초 : 재귀 함수 (2)  (0) 2024.03.01
C++ 기초 : 재귀 함수 (1)  (0) 2024.02.27
C++ 기초 : 함수 (3)  (0) 2024.02.26