반응형

배열

 

 

변수를 선언할 때 몇 개 정도의 변수는 변수명과 자료형을 명시하면서 변수를 선언하여 사용할 수 있다.

 

하지만

 

비슷한 역할을 하는 변수를 수십 개, 수백 개 혹은 그 이상을 선언하여 사용하는 경우라면 어떨 것 같은가?

 

사용해야 하는 변수의 수만큼 자료형과 변수 이름을 지으면서 변수를 선언하게 되면

 

코드의 양이 많아질 뿐만 아니라 변수를 선언하는 것조차 번거로운 일이 된다.

 

배열은 바로 이런 상황에서 사용할 수 있는 것이다.

 

배열의 선언 방법은 아래의 사진과 같다.

 

-

 

 

-

 

위 사진은

 

정수형을 갖는 배열의 크기

 

 

배열 요소의 개수가 10인 배열을 선언한 것이다.

 

위의 내용과 같이 배열을 선언하면 배열의 자료형은 정수형(int)이 되고

 

배열 이름은 array이고

 

배열 요소의 개수는 10, 즉 10개의 정수형 변수를 선언한 것과 같다.

 

메모리 공간은 다음 사진과 같이 각각 4바이트씩 10개로 총 40바이트가 연속적으로 할당된다.

 

-

 

 

-

 

이제 아래의 사진을 통해 예제를 한 번 봐보자.

 

-

 

test23.c
0.00MB

 

 

 

 

-

 

위의 예제는 각각 배열 요소의 개수를 5개로 갖는 char, int, long, float, double 형의 배열을 선언한 뒤

 

각 배열이 사용하는 메모리의 크기를 출력한다.

 

실행 결과를 보면 출력되는 배열의 크기는 각 자료형의 크기에 5를 곱한 것과 같다는 것을 알 수 있다.

 

배열을 선언하면 배열의 크기만큼 연속적으로 한꺼번에 메모리 공간을 할당하기 때문

 

배열을 선언하면서 반드시 그 배열의 크기가 지정되어야 한다.

 

단, 배열의 크기를 정하지 않는 경우 배열을 선언하면서 동시에 배열을 초기화하는 경우이다.

 

하지만

 

이 경우에도 배열을 초기화하면서 배열의 개수를 계산할 수 있으므로

 

배열을 선언하면서 그 크기가 지정되어야 한다는 점은 변하지 않는다.

 

배열 값을 저장하거나 배열에 저장된 값을 참조하기 위해서

 

배열의 시작부터 몇 번째 위치라는 것을 의미하는 인덱스(index)라는 첨자를 사용하게 된다.

 

 

인덱스를 사용할 때 주의할 점이 있다.

 

인덱스의 값이 1부터 시작되는 게 아니라 0부터 시작한다는 점이다.

 

만약 배열 요소의 5인 배열을 선언하면 인덱스는 0부터 4까지만 참조할 수 있으며

 

인덱스의 범위를 초과하여 값을 참조하면 에러가 나거나 프로그램이 정상적으로 실행되지 않을 수도 있으므로

 

인덱스를 사용할 때는 주의하도록 하자.

 

 

인덱스가 배열의 시작부터 몇 번째 위치를 의미한다는 것은 아주 중요한 개념이다.

 

그러므로 아래의 예제를 통해 자세히 알아보자.

 

-

 

test24.c
0.00MB

 

 

 

-

 

위 예제는 문자형 배열과 정수형 배열을 선언한 뒤

 

각 배열을 구성하는 배열 요소 각각의 주소 값을 출력한 예제이다.

 

각각의 주소 값을 출력하기 위해서 '&' 연산을 사용했지만

 

이 연산은 나중에 포인터 연산자 글에서 더 자세히 설명할 것이기 때문에

 

현재는 단순히 변수의 주소 값을 추출한다는 것만을 기억하도록 하자.

 

 

문자형 변수 a[0]부터 a[4]까지의 주소 값을 보면

 

1byte씩 증가한다는 것을 알 수 있고

 

변수 b[0]부터 b[4]까지의 주소 값을 출력할 때는 주소 값의 크기가 4byte

 

 

해당 배열의 자료형 크기만큼 증가한다는 사실을 알 수 있다.

 

이 점은 나중에 배울 포인터 연산에서 자세히 설명할 것이며

 

나중에 네트워크 프로그래밍을 하다보면

 

네트워크 헤더와 관련하여 주소 값을 계산할 때도 중요한 점이기 때문에 꼭 기억하도록 하자.

 

 

배열은 배열의 선언과 동시에 값을 초기화할 수 있는데

 

이때는 중괄호 '{'와 '}'를 이용하여 초기화하려는 값을 나열한다.

 

그렇다면 예제를 한 번 봐보자.

 

-

 

test25.c
0.00MB

 

 

 

-

 

위 예제는 배열 초기화에 대한 예제를 보여준다.

 

-

 

 

-

 

위에서 6행의 내용인 위의 구문은 배열 요소의 개수가 5인 정수형 배열 a를 선언한 뒤

 

배열 요소를 순서대로 1부터 5까지의 값으로 초기화한다는 내용이다.

 

-

 

 

-

 

7행의 내용인 위의 구문은 배열 요소의 개수를 지정하지 않고 

 

1개의 값만 이용하여 초기화하는 구문으로

 

초기화하는 값의 개수를 통해 컴파일 시점에서 배열의 크기

 

 

배열이 사용하는 메모리의 양을 계산해 낼 수 있으므로 정상적으로 컴파일되어 실행된다.

 

결과는 배열 요소의 개수가 1인 배열이 된다.

 

 

13행에서 저장된 값을 출력하기 위해서 for 문이 사용됐는데

 

반복 회수를 정할 때 전체 배열의 크기를 정수 자료형의 크기로 나누어 배열 요소의 개수를 계산한 뒤

 

해당 배열 요소의 개수만큼 반복문을 실행한다.

 

-

 

 

-

 

8행의 내용인 위의 구문은 배열 요소의 개수가 5인 정수형 배열을 선언한 뒤에

 

기술된 두 개의 값만을 이용하여 순서대로 2개의 배열요소(c[0], c[1])만을 초기화한다.

 

나머지 c[2], c[3], c[4]의 값은 초기화하지 않았는데 위의 결과를 보면 초기화 자료를 생략할 때

 

 

정수형 배열에서 초기화하지 않으면 자동으로 0으로 초기화된다는 사실을 확인할 수 있다.

 

 

이제까지는 하나의 자료형으로 n개를 연속적으로 할당하여 사용하는 배열에 대해서 학습했다.

 

만약에 n개를 연속적으로 할당하면서 이러한 배열이 m개 필요하다면 어떻게 선언하면 되느냐

 

이 경우를 C 언어에서는 2차원 배열이라고 하며 n x m의 메모리 공간을 연속적으로 할당하여 사용할 수 있다.

 

2차원 배열은 다음과 같이 선언할 수 있다.

 

-

 

 

-

 

예를 들어, 위와 같이 int array[2][2]를 선언하면 메모리에는 아래의 사진과 같이 할당되게 된다.

 

-

 

 

-

 

2차원 배열 또한 앞서 학습한 배열 특징을 그대로 갖고 있으며

 

인덱스 연산 및 배열의 크기 또한 기본 배열과 동일하게 사용할 수 있다.

 

다만, 주의할 점은

 

2차원 배열을 초기화할 때는 중괄호 '{'와 '}'를 이중으로 사용해야 한다는 점이다.

 

아래의 예제를 통해 2차원 배열을 초기화하는 것에 대해 봐 보자.

 

-

 

test26.c
0.00MB

 

 

 

-

 

위의 예제는 2차원 배열의 선언과 초기화를 함께 사용 방법을 보여주고 있으며

 

2차원 이상의 3차원, 4차원 등의 배열도 위와 같은 방법으로 선언과 초기화를 하여 사용하면 된다.

 

반응형

'시작하지 말았어야 했던 것 > C언어 기본 문법' 카테고리의 다른 글

13. 함수  (0) 2021.02.01
12. 문자와 문자열  (0) 2021.02.01
10. break문과 continue문  (0) 2021.02.01
8. 반복문  (0) 2021.02.01
7. 조건문  (0) 2021.02.01

+ Recent posts