본문 바로가기
C언어

야메 C언어 강좌: 9. 배열

by 케찹이 2020. 7. 26.

안녕하세요 정말로 오랜만에 다시 돌아왔습니다. 무려 두달 동안 글을 올리지 못했는데 학기말에 갑자기 바빠지고 계절학기도 듣고 이것저것 하다 보니 늦어지게 되었습니다. 앞으로는 다시 열심히 공부하고 글 포스팅 올리도록 하겠습니다. 요즘에 저는 C++을 배우고 있는데요 1학년때 배웠지만 그때는 공부를 열심히 안해서 지금 다시 공부하는 내내 새롭내요 ㅎㅎ. 여러분들도 C를 모두 배우면 C++에 도전하 실수 있습니다. 왜냐하면 C의 거의 모든 내용들을 C++은 포함하고 있기 때문이죠. 그리고 C++은 정말 많은 곳에 활용할 수 있기 때문에 반드시 배워보는 것을 추천드립니다. 그럼 다시 우리가 배우고 있는 C로 돌아가서 오늘은 배열에 관해서 배워보도록 하겠습니다.

그동안 우리는 변수 하나를 선언을 할때에는 하나하나 변수 타입을 선언하고 변수 이름을 지어주었습니다. 하지만 앞으로 우리는 방대한 데이터들을 다루게 될텐데 모든 데이터를 변수 선언을 하고 이름을 따로 짖게 되면 얼마나 귀찮은 일이 될까요? 이러한 일을 방지하기 위해서 배열을 사용해보도록 하겠습니다.

 

#include<stdio.h>

 

int main() {

        int arry[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

 

        for (int i = 0; i < 10; i++) {

               printf("%d ", arry[i]);

        }

 

        return 0;

}

 

위 코드를 실행시키면 0 ~ 9가 나란히 출력되게 됩니다. 0 ~ 9숫자들은 코드에서 보시다싶이 대괄호안에 있는 숫자들이겠죠.

 

int arry[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

 

 

여기가 바로 배열을 선언한 코드입니다. 배열을 선언할때의 모습은

배열타입 배열이름[배열크기] = {배열내용…}

 

대략 이렇게 됩니다. 배열타입은 앞서 우리가 변수타입을 정할때와 같습니다. Int, char, double, float등 변수타입들이 들어오게 되겠죠. 저는 위 코드에서 int를 배열타입으로 정했습니다. 배열이름은 여러분들이 각자 해당 배열의 기능에 맞게 지정하면 되겠죠? 그리고 대괄호안에서부터 하나씩 각 배열안에 들어가게될 데이터를 입력하면 됩니다. 물론 배열의 변수에 맞게 데이터를 넣어주어야 합니다. 저는 배열을 int 타입으로 지정하였으니 정수가 배열안에 들어와야 겠죠?

for (int i = 0; i < 10; i++) {

               printf("%d ", arry[i]);

        }

 

그러고 나서는 for문으로 감싸서 배열안의 데이터를 출력해보았습니다. 여기서 주목할 점은 바로 arry[i]의 i입니다. 위에서 i의 초기값을 0으로 선언을 했고 처음으로 출력되는 데이터는 arry[0]이 됩니다 이것은 즉 배열의 0번째 위치에 있는 데이터를 뜻합니다. ? 1번째가 아니고 0번째요???

0번째가 바로 첫번째입니다. 즉 위 코드를 토대로 arry[0]은 0이고 arry[9]은 9입니다. 그럼 arry[10]은 어떤 값일까요? 실제로 위 코드에서 arry[10]을 출력하라는 명령을 내리면 run_time error가 나옵니다. 그 이유는 우리가 선언한 배열의 크기보다 더 큰 자리의 데이터를 불러오려고 했기 때문이죠.

자 그럼 위의 내용을 잠깐 정리하도록 하죠!

 

-       처음 배열을 선언할때에는 실제 우리가 알고 있는 크기를 입력한다.

-       배열을 사용할때에 크기는 (실제크기 – 1) 위치를 의미한다.

 

이제배열을 배웠으니 많은 양의 데이터를 쉽게 해결할 수 있게 되었네요. 그럼 여러분들이 배열을 가지고 놀기전에 한가지만 더 이야기하려고 합니다.

 

int arry[10] = { 0 };

 

바로 이러한 모습의 코드를 살펴보도록 하겠습니다. 위 코드는 arry라는 배열이 10의 크기를 가지고 있고 데이터는….??? 0??? 굉장히 혼란스럽습니다….. 이럴때는 주저하지 말고 컴파일러에 코드를 작성하세요.

 

printf("%d ", arry[1]);

 

그럼 출력 결과는 0이 나옵니다. 지금 이 시점에서 어? 대괄호안에 데이터를 하나만 집어넣으면 모든 위치의 데이터가 그 값으로 통일이 되나???라는 결론을 낼수도 있기 때문에 상황을 조금 달리 해보도록 하겠습니다.

 

int arry[10] = { 1, 2 };

 

위 처럼 데이터값을 바꾸고 다른 위치의 데이터를 출력해보세요. 그 결과는….

0입니다. 네 그럼 이제 결론을 내도 되겠네요.

배열의 크기보다 적은 데이터를 입력받았을 때는 다른 위치의 데이터값은 자동으로 0으로 초기화가 됩니다. 그럼 모든 배열에 0을 초기화하고 싶을때는 굳이 괄호안에 0으로 꽉 채우지 않아도 되겠네요!

 

오늘은 여기까지만 배워보도록 하겠습니다. 이제 C언어의 어려운 부분에 슬슬 진입하기 시작했네요. 덕분에 저도 부족한 부분을 다시 상기시키고 제글을 읽는 여러분들도 마음을 다잡고 공부하셔야 겠네요. 자 그럼 여러분 오늘도 여러분들이 배운 내용들을 잘 활용해보기 바랍니다.

댓글