brunch

You can make anything
by writing

C.S.Lewis

by Moai Sep 14. 2020

C++ 배열

왜 배열은 0부터 시작하는가?

배열(array)이란 단어를 들었을 때 무엇이 생각나는가? 무엇인가를 순서대로 배열하다?  

너무 단어에 의미를 두지 말자. 배열을 정의하면 확 이해가 와 닿지 않기 때문에 정의 대신 설명으로 대체하겠다.

100명의 학생 이름을 저장하기 위한 변수를 선언한다고 하자.

string student1;

string student2;

string student3;

string student4;

...

string student100;

보통 한 코드 파일의 길이는 100줄 내외이다. 기능이 많을 경우 1000줄이 넘을 수 있지만 변수 선언만으로 100줄을 차지하는 것은 너무하지 않는가? 심지어 변수에 값을 넣는 것도 100줄이 필요하다.

student1 = "철수";

student2 = "짱구";

...

student100 = "영희";




하지만 배열을 이용한다면 단 한 줄로 변수를 선언할 수 있다.

string student[100];

그리고 다음과 같이 사용하면 된다.

student[0] = "철수"

student[1] = "짱구"

...

student[99] = "영희"

무엇인가 이상하다고 느꼈는가" 배열은 1이 아닌 0부터 시작한다.

이유가 무엇일까? 컴퓨터를 영어로 하면 전자계산기이다. 즉 수를 계산하는 기계이다. 수학의 기준은 1이 아니라 0이기 때문에 0부터 시작한다고 생각하자. 1의 반대는 -1이 있다. 하지만 0의 반대가 있는가? 없다 왜냐하면 0이 기준이기 때문이다.


위처럼 코드를 사용하면 에러가 발생할 것이다. string 배열은 각 문자열의 길이가 얼마인지 모르기 때문에 선언과 동시에 초기화를 시켜주어야만 한다. 아래 방식을 사용하자.




변수는 선언과 동시에 초기화를 할 수 있다.

string student1 = "철수";

그렇다면 배열도 선언과 동시에 초기화할 수 있을까? 이런 식으로 선언과 동시에 초기화해주면 된다.

string student[] = { "철수", "짱구",  ... "영희" };


굳이 string student[100]이라고 입력 안 하고 string student[]라고 해도 된다.

개수가 너무 많아지면 일일이 셀 수 없지 않은가? 알아서 개수만큼 초기화해준다. 걱정하지 말자.

cout << student[1] << endl;을 출력하면 무엇이 출력될까?

철수 일까? 아니다 배열은 0부터 시작하기 때문에 짱구가 출력될 것이다.


   

매거진의 이전글 C++ 간단한 은행 프로그램
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari