8.1 배열의 선언과 사용
학습목표
- 동일한 자료형을 저장할 저장 공간이 많이 필요한 경우 일일이 변수를 선언하는 일은 만만치 않다.
이때 배열을 사용하면 많은 변수 선언문을 간단히 대체할 수 있다.
- 배열을 선언하면 많은 변수를 한 번에 선언하는 효과를 볼 수 있다.
- 배열을 초기화 할 때는 중괄호를 사용한다.
- 배열은 주로 반복문으로 처리한다.
- 배열 전체의 크기를 구할 때 sizeof 연산자를 쓴다.
배열은 각 저장 공간을 이름과 첨자(index)로 구분한다.
Q 언제 배열을 사용하느냐? 배열은 정확히 무엇이냐?
A 같은 자료형의 변수를 여러 개 사용할 때 배열을 사용한다. 배열은 메모리에 저장 공간을 한꺼번에 확보하고 사용할 때는 하나씩 떼어 쓰는 방식으로 구현된다.
구분 | 사용 예시 | 기능 |
배열 선언 | int arr[5]; | int형 변수 5개를 한 번에 확보한다. |
요소 사용 | arr[0], arr[1], arr[2], ... | 배열 요소를 사용할 때는 첨자를 0부터 시작하여 '요소 수 - 1'까지 쓴다. |
초기화 | int arr[5] = {1, 2, 3, 4, 5}; | 초기화는 중괄호 안에 값을 나열한다. |
8.1.1 배열 선언과 배열 요소 사용
배열은 사용하기 전에 먼저 선언해야 한다. (변수 선언과 마찬가지!) 배열을 선언하는 것이란, 메모리에 저장 공간을 확보하는 것이며 저장 공간의 개수와 관계없이 이름은 하나만 사용한다.
ex) int arr[5]; 과 같이, (요소형태) (배열명) [요소 개수]; 으로 선언한다.
배열은 저장 공간이 "연속으로" 할당되며 배열명이 전체 공간의 이름이 된다.
무슨 말이냐?
예시를 들어, int arr[5]; 를 선언하면 int형으로 arr[0], arr[1], arr[2], arr[3], arr[4] 와 같이 연속적을 저장공간이 만들어지는데, int형 변수의 크기가 4byte이므로 5개를 연속으로 할당하면 이 배열의 저장공간인 20byte가 할당된다.
대괄호의 의미?
선언할 때: [배열 요소의 전체 개수]
사용할 때: [각 요소가 배열에서 몇 번째에 있는지]
배열 요소를 사용할 때는 첨자를 0부터 시작하여 '요소 수 - 1'까지 쓴다.
즉, 배열 요소의 개수가 5개이면 첨자는 0부터 4까지만 사용한다.
Q 배열 arr의 배열 요소 수가 5개일 때, arr[5]를 사용하면?
A 배열 요소를 사용할 때 첨자의 사용 범위를 벗어나면 그 결과는 예측할 수 없다. (쓰레기 값이 나온다.)
8.1.2 배열 초기화
변수와 마찬가지로, 배열도 최초 할당된 저장 공간에는 쓰레기 값이 있다. 배열이 선언과 동시에 원하는 값을 갖도록 하려면 초기화를 해야 한다.
배열은 중괄호로 묶어서 초기화한다.
반드시 선언과 동시에 초기화해야 하며, 선언하고 난 후에 값을 저장하려면 배열 요소에 하나씩 값을 대입해야 한다.
초기값은 첫 번째 요소부터 차례로 초기화된다. 초기값이 배열 요소 보다 적을 경우에는?
왼쪽에서 차례로 초기화되고 남는 배열 요소는 모두 0으로 채운다.
1차원 배열의 경우에는 배열을 초기화하면서 배열 요소 수를 생략하고 선언할 수 있다.
이 경우 컴파일러는 초깃값 개수만큼 배열 요소 수를 정하고 저장 공간을 할당한다. 즉, arr2는 3칸의 메모리에 저장 공간이 할당되고 초기화된다.
중괄호를 사용한 배열의 초기화는 선언할 때 최초 한 번만 가능하다.
그 이후, 배열 요소를 사용하여 일일이 값을 바꿔야 하며, 초기화 때처럼 대입 연산으로 한 번에 값을 바꾸는 것은 불가능하다.
※ 선언 및 초기화 이후, arr1 = {10, 20, 30, 40, 50}; 대입 XXX
8.1.3 배열과 반복문
배열의 요소는 일일이 작업해주어야 한다. 근데 번잡스럽기 때문에, for문과 같은 반복문을 이용하여 작업해주는 것이 효율적이다.
8.1.4 sizeof 연산자를 활용한 배열 처리
배열은 보통 많은 양의 데이터를 처리하므로 반복문 사용이 필수적이다. 따라서 배열 요소 수가 바뀌면 배열을 처리하는 반복문을 모두 수정해야 하는 부담이 있다. 이 경우 배열 요소 수를 직접 계산하여 반복문에 사용하는 방법이 있다.
배열 요소 수는 'sizeof (배열명) / sizeof (배열 요소)' 와 같이 구한다.
아까 코드한 거에 i < (배열 요소 수) 5 가 아닌 cnt 라는 변수를 선언하여, sizeof (score) / sizeof (score[0]) 를 대입하면 된다.
배열 요소 수를 담을 변수 = 배열 전체 크기 / 배열 요소 하나의 크기
'C언어 공부 > 개념 공부' 카테고리의 다른 글
2024.01.18 C언어 <메모리 동적할당(1)> (0) | 2024.01.18 |
---|---|
2024.01. C언어 <배열 (2)> (0) | 2024.01.13 |
2024.01.08 함수 응용 (0) | 2024.01.12 |
2024.01.08 C언어 학원 필기 요약본 <함수 (3)> (0) | 2024.01.12 |
2024.01.08 C언어 <함수 (2)> (0) | 2024.01.12 |