본문 바로가기
PROGRAMMING/C

C언어 배열 기초

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

오늘은 배열에 대해서 알아보려고 합니다. 여기서 부터 C언어의 약간 중급단계 느낌입니다. 완전 기초적인 내용은 제 블로그 카테고리중에서 C에 올라온 내용들을 확인 해 주십시오. 

 

1. 배열의 정의와 형식

자~ 그럼 본격적으로 오늘 알아볼 배열에 대해서 이야기 해 보겠습니다. 배열을 네이버에서 검색해 보면 아래와 같이 배열의 정의에 대해서 확인 할 수 있습니다.

일정한 차례나 간견에 따라 벌여 놓음, 동일한 성격의 데이터를 관리하기 쉽도록 하나로 묶는 일. C언어의 배열은 이 정의된 내용 모두가 해당되는 것 같네요. 예를 들어 보겠습니다. 만약에 정수형 변수를 7개 선언하고 싶으면 아래와 같이 선언해야 합니다.

7개만 선언해도 많아보이네요. 그럼 10개, 20개를 이렇게 각각 선언하고자 한다면 조금 피곤해지겠지요? 그럴 때 사용하는 것이 배열입니다. 위에서 선언한 7개의 정수형 변수를 배열로 선언하고자 한다면 아래와 같이 선언 하면 됩니다.

위와 같이 이렇게 선언하면 array라는 정수형 배열이 선언된 것입니다. 배열의 이름인 array뒤에 붙어 있는 대괄호 안의 7이라는 숫자가 배열의 크기(원소의 갯수)를 나타내고 있습니다. 그리고 배열에서 좋은 점은 변수로 각각 선언할 때 보다 초기값 설정이 편리하다는 점입니다. 예를들어 정수형 변수를 선언하면서 초기값을 각각 다르게 설정하고자 한다면 아래와 같이 선언하여야 합니다.

줄을 많이 차지하지요. 7개를 선언해도 이렇게 긴데, 10개 20개 혹은 100개를 선언할 때는 정말 피곤해 질 것 같습니다. 그렇다면 배열에서는 어떻게 하면 될까요? 바로 아래와 같이 선언해 주면 됩니다.

보기에도 깔끔해보이고, 단 한줄로 끝나서 작성하기도 훨씬 편리합니다. 아까 위에서 대괄호 안의 숫자가 배열의 크기를 정의해 주는 원소의 갯수라고 했습니다. 중괄호 안에 위치하는 값은 각각의 배열의 원소에 입력되는 원소의 값입니다. 아까 위에서 원소의 값을 선언해 주지 않고 데이터 타입과 배열의 이름, 그리고 배열의 원소의 갯수만 정의해 주어도 되는 것을 확인 하였습니다. 반대로 원소의 갯수를 정의해 주지 않더라도 원소의 값을 입력해 주면 컴퓨터가 원소의 값을 읽고 갯수를 세어서 자동으로 원소의 갯수가 입력된것 처럼 실행됩니다. 아래와 같이 말이죠.

위와 같이 배열을 선언하면 원소의 갯수가 7개이고 첫번째 원소의 값이 1이고 두번째 원소의 값이 2이고 ....(생략).............. 일곱번째 원소의 값이 7인 배열이 선언되는 것입니다. 이렇게 배열을 선언하는 방법을 모두 정리해 보자면 아래와 같습니다.

자, 지금까지 배열을 선언하는 방법을 알아보았습니다. 그럼 이제 배열을 직접 사용해 보아야겠죠? 배열은 어떻게 사용하는 걸까요? 우리는 애초에 동일한 데이터 타입의 변수를 다량 선언할 때 좀 더 편리함을 확보하기 위해서 배열을 사용했습니다. 그래서!!! 배열을 사용하는 방법도 변수를 사용하는 방법과 크게 다르지 않습니다. 먼저 매우 간단한 예제를 하나 만들어 보겠습니다.

자 위 프로그램은 덧셈 프로그램입니다. 평소 같으면 정수형 변수 3개를 선언했겠지만 오늘은 배열을 사용해 보았습니다. 배열을 사용할 때도 변수처럼 사용하면 됩니다. 다만 호출할 때 반드시 원소의 번호를 적어주어야 합니다. 그리고 배열의 원소번호는 0번부터 시작하는 것을 잊어서는 안됩니다. 즉 예를 들어 배열 array[10]에는 원소 array[0]부터 array[9]까지 10개의 원소가 포함되어 있는 것입니다. 이해하셨나요? 원소의 갯수를 의미하는 10이라는 숫자는 10번까지 있다가 아니라 10개가 들어 있다는 의미인 것입니다.

 

2. 배열의 위치

그럼 배열이 컴퓨터 메모리 상에 어떻게 위치하는지를 한번 알아보겠습니다. 배열은 우리가 선언할 때 원소의 갯수를 함께 선언해 주기 때문에 메모리상에서 필요한 공간을 처음부터 파악할 수 있습니다. 그래서 연속된 메모리 공간을 처음부터 차지하고 있습니다.

 이게 무슨 의미냐면 예를 들어 위와 같이 정수형이면서 원소의 갯수가 3개인 배열 array[3]이 선언되었다고 가정할 때 바로 위 그림처럼 배열의 첫번째 원소 array[0]부터 배열의 마지막 원소 array[2]은 컴퓨터 메모리상에 순서대로 정렬된다는 의미입니다. 그래서 배열의 원소를 호출하거나 배열의 원소에 데이터를 대입할 때 선언된 배열의 원소의 갯수보다 낮은 원소번호를 입력했는지 꼭 확인해야 합니다. 만약에 배열의 원소번호를 원소의 갯수보다 높은 수를 입력하게 되면 컴퓨터의 메모리상에서 배열에 할당된 공간이 아닌 다른 메모리 공간을 건드리게 되기 때문입니다.

 

3. 배열의 사용 연습

오늘 알아본 배열의 사용 연습을 하나만 더 해보겠습니다. 

배열을 사용하여 3개 과목의 점수를 입력받아 평균을 계산하는 프로그램을 작성 해 보았습니다. 만약에 변수를 사용했다면 각각의 과목 점수를 입력받는 부분에 반복문인 for문을 사용하기가 어려웠겠죠. 배열을 사용했기 때문에 for문을 입력하여 각각의 과목 점수를 입력받는 부분을 좀 더 간단하게 작성할 수 있었습니다. 여기서 주의해야 할 점은 for문을 작성할 때 조건식 부분에서 배열을 선언할 때 썼던 원소의 갯수인 3이 아니라 실제 원소의 마지막 번호인 2까지를 써야 한다는 점입니다. 만약에 조건식에서 2가 아닌 3을 쓴다면 프로그램 실행부분에서 오류가 발생하거나 배열에 배정된 메모리 이외의 부분을 건드리게 되어 문제가 발생하게 됩니다. 

여튼 위 예제를 통하여 이미 선언된 배열을 호출할 때 원소의 번호를 변수로 만들어서 호출해도 정상적으로 사용이 가능하다는 것을 보여드리고 싶었습니다. 그럼 실행결과를 알아볼까요?

정상적으로 잘 실행되는 것을 알 수 있었습니다. 그럼 여기서 한가지 더 의문이 생깁니다. 애초에 배열을 선언할 때 배열의 크기 부분을 변수로 선언하여 배열의 크기를 가변적으로 사용할 수 있을까요? 정답부터 얘기하자면 안됩니다. 위에서 배열을 선언하는 방법을 알아볼 때 배웠던 것처럼 대괄호 속에 원소의 갯수를 입력하거나, 중괄호 속에 원소의 값을 입력하여야 정상적으로 배열의 선언이 완료 됩니다. 오늘은 이렇게 배열의 기초에 대해서 알아보았습니다. 다음시간에 배열을 좀 더 응용하여 배워보는 시간을 가져보겠습니다. 감사합니다.

 

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

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

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

공개로 부탁드립니다.

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

힘이 된답니다. :)

감사합니다.

반응형

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

C언어 포인터 기초  (0) 2022.10.26
C언어 배열 응용  (0) 2022.10.25
C언어 상수 constant  (0) 2022.10.21
C언어 형변환 (캐스팅)  (0) 2022.10.20
컴퓨터가 음수를 표현하는 원리  (0) 2022.10.19

댓글