본문 바로가기
PROGRAMMING/C

C언어 배열 응용

by 쪼렙엔지니어 2022. 10. 25.
반응형

오늘은 배열의 두번째 시간으로 지난 시간에 배웠던 배열의 기초를 이용해서 좀 더 자세한 배열의 사용법에 대해서 알아보도록 하겠습니다.

1. 2차원 배열 개념 (2중배열)

먼저 이야기 해 볼것은 2차원 배열입니다. 아~ 갑자기 왜 어려운 단어를 가지고 오냐고 생각하실 수도 있는데 전혀 그렇지 않습니다. 우리가 앞서 배웠던 가장 기본적인 배열은 동일한 데이터타입의 나열이라고 했었죠? 즉 한줄을 길~게 줄 서있다고 보시면 됩니다. 그런데 그 줄이 꼭 하나일 필요는 없는거잖아요. 두줄로 서도 되는거잖아요? 이제 그 방법을 알아보겠습니다.

위에서 선언한 배열은 둘다 정수형 배열입니다. 다만 첫번째 배열은 1차원 배열이고, 두번째 배열이 2차원 배열입니다. 1차원 배열의 크기는 3으로 입력되어 있으니 원소가 3개라는 뜻이지요. 2차원 배열의 크기는 2x3이라고 생각하시면 됩니다. 즉 총 원소의 갯수가 6개가 됩니다.

1차원 배열의 경우 원소가 위와 같이 일렬로 나열되어있다고 친다면 2차원 배열의 경우는 원소가 아래와 같이 나열된다고 생각하시면 됩니다.

순서는 [0][0], [0][1], [0][2], [1][0], [1][1], [1][2]입니다. 그럼 메모리 공간에서는 어떻게 존재할까요?

배열은 2차원으로 선언되었지만 메모리에서는 배열의 원소 순서대로 차례대로 나열됩니다. 메모리까지 2차원으로 바뀌는건 아니니까요. ㅎㅎ 그럼 여기서 한발자국 더 나아가서 2차원 배열을 선언할 때 원소의 값을 입력하는건 어떻게 해야 할까요? 

위 두가지 방법 중 편하신걸로 하시면 됩니다. 첫번째 방법의 경우 2차원 배열이라 하더라도 위에서 알아보았던것 과 같이 원소의 순서가 정해져 있기 때문에 굳이 두번째 방법처럼 중괄호를 한번 더 사용하여 나누지 않더라도 컴퓨터가 알아서 대입시켜줍니다. 그럼 배열의 크기를 지정해주는 원소의 갯수는 1차원 배열때 처럼 생략이 가능할까요?

위와 같은 형식은 사용이 가능합니다. 하지만 아래와 같은 형식은 오류가 발생하며 사용이 불가능합니다.

즉, 2차원 배열에서는 첫번째 대괄호는 비워도 되지만 나머지 대괄호는 꼭 지정을 해 주어야 합니다. 명심하시기 바랍니다. 쉽죠? 배열이란 동일한 데이터타입을 저장하는 공간을 만든다고 생각하시고, 그 공간에 접근할 때 1차원 배열은 한가지 값으로 접근하고, 2차원 배열은 두가지 값으로 접근하다고 생각하시면 됩니다. (참고로 3차원 배열, 4차원 배열도 있습니다. 2차원 배열과 동일한 방법으로 사용이 가능합니다. 2차원 배열에서 좀 더 확장된 개념이라고 생각하시면 편리합니다.)

 

2. 2차원 배열 예제

그럼 간단하게 예제를 하나 풀어보도록 하겠습니다.

1차원 배열을 사용 했을 때 처럼 배열을 호출할 때 원소 갯수를 변수로 활용해 점수를 입력하고 점수의 평균을 구하는 프로그램 입니다. 1차원 배열을 확실히 배웠다면 해당 예제도 크게 어려울 것 없는 예제입니다. 항상 주의 할 것은 배열을 선언할 때 대괄호 안에 입력한 숫자는 배열의 원소 갯수이지 원소번호가 아니라는 점을 꼭 기억해야 합니다. 그럼 프로그램을 실행해 보겠습니다.

정상적으로 잘 작동하고 있는 것을 확인할 수 있습니다. 이로써 배열에 대한 공부도 끝이 났습니다. C언어에서 또 한가지 관문을 통과한 것과 다름이 없습니다. 앞으로 포인터와 함수에 대한 내용만 배우고 나면 C언어의 기본이 되는 내용은 모두 배웠다고 해도 과언이 아닙니다. 최대한 빨리 정리할 수 있도록 하겠습니다. 오늘은 여기까지 입니다. 감사합니다.

 

제 블로그를 방문해 주셔서 감사합니다.

도움이 되셨다면 공감(좋아요) 부탁드리고,

댓글은 다른분들께도 좋은 정보일 수 있으니

공개로 부탁드립니다.

여러분의 작은 정성이 좋은 포스팅을 생산하는

힘이 된답니다. :)

감사합니다.

 

반응형

'PROGRAMMING > C' 카테고리의 다른 글

C언어 포인터 심화과정 (상수포인터)  (0) 2022.10.31
C언어 포인터 기초  (0) 2022.10.26
C언어 배열 기초  (0) 2022.10.24
C언어 상수 constant  (0) 2022.10.21
C언어 형변환 (캐스팅)  (0) 2022.10.20

댓글