배열은 같은 형태의 다수의 데이터를 연속적으로 저장하고 처리하는 경우에 사용하는 것입니다.
만약 100명의 이름을 저장하여 사용하고자 한다면, 100개의 변수를 선언해서 각각 저장하고 사용해야 합니다. 하지만 배열을 사용하면 변수 하나로 아주 쉽게 사용할 수 있습니다.
정수형 변수 a는 4바이트의 메모리를 사용합니다. 따라서 배열의 크기가 4인 정수형 배열 arr[4]는 정수형 변수를 4개 저장할 수 있으며, 아래와 같이 메모리가 연속적으로 할당됩니다.
배열 선언을 할 때는 변수 이름 뒤에 [ ]
(대괄호)를 붙인 뒤 크기를 설정합니다. 그리고 배열을 선언하면서 값을 초기화할 때는 { }
(중괄호)를 사용합니다.
형식 자료형 배열이름[크기]; 자료형 배열이름[크기] = { 값, 값, 값 }; |
int형 요소가 4개인 배열을 선언하는 예는 다음과 같습니다. |
그리고 왼쪽의 문장으로 인해서 선언되는 배열의 형태는 다음과 같습니다. |
배열을 접근하기 위해서는 배열 뒤에 [ ]
(대괄호)를 사용하며 [ ]
안에 각 요소의 인덱스(위치정보)를 지정해줍니다.
여기서 중요한 점은 배열의 인덱스는 항상 0부터 시작한다는 점입니다. 따라서 배열 arr의 첫 번째 요소는 arr[0]이 되고, 두 번째 요소는 arr[1]이 됩니다.
|
왼쪽의 코드를 보고 배열에 다음과 같이 값이 저장되어 있다고 예상할 수 있습니다. |
왜 1번부터 시작하지 않고 0번부터 시작하나요?
배열의 각 요소는 시작 위치를 기준으로 몇 칸 떨어진 곳에 있다는 식으로 접근하기 때문입니다.
C언어에서는 (주로 문자 자료형으로 쓰이는) 정수형 char는 있지만 문자'열'을 저장하는 자료형은 없습니다.
char형 배열은 문자들을 메모리의 연속된 공간에 저장할 수 있으므로 주로 문자열을 저장하는 용도로 쓰입니다.
char형 배열을 선언할 때는 반드시 저장할 문자열의 길이보다 최소한 하나 이상 크게 배열을 선언해야 합니다.
예를 들어 문자열 "sejong"을 저장할 배열은 배열 요소 개수가 최소한 7개 이상 이어야 합니다.
문자열의 끝에 이렇게 남는 배열 요소에는 모두 자동으로 \0
이라는 특수문자가 삽입됩니다.
\0
을 '널(null) 문자'라고 하는데, 이렇게 남는 공간은 문자열의 끝을 의미하기 위해 사용됩니다.
char형 배열이 문자열을 저장하는 변수의 역할을 합니다. 문자열의 길이는 다를 수 있으므로 char형 배열을 일반 변수처럼 대입 연산자를 사용하는 것은 불가능합니다.
strcpy 함수는 char형 배열에 새로운 문자열을 저장하는 함수입니다. strcpy는 string copy의 뜻으로 문자열 복사를 의미합니다.
strcpy 함수는 string.h 헤더파일을 include 시켜줘야 합니다. ( #include <string.h> ) 이 헤더파일에는 문자열을 다룰 수 있는 함수들을 포함하고 있습니다.
|
실행결과 sejong university |
strcpy의 기본 사용법은 다음과 같습니다.
|
문자열을 입력받는 배열의 이름 앞에는 &연산자를 붙이지 않습니다. 문자열 배열 이름자체가 배열의 주소값을 의미하기 때문입니다.
2차원 배열은 1차원 배열과 매우 유사합니다. 다만 행렬의 구조처럼 세로와 가로를 명시합니다.
2차원배열은 다음과 같은 문법에 따라 선언할 수 있습니다. 변수 이름 뒤에 [ ]
(대괄호)를 붙인 뒤 크기를 설정합니다. 그리고 배열을 선언하면서 값을 초기화할 때는 { }
(중괄호)를 사용합니다.
형식 자료형 배열이름[세로(열)길이][가로(행)길이]; 자료형 배열이름[세로(열)길이][가로(행)길이] = { { 값, 값, ... }, { 값, 값, ... }, { 값, 값, ... }, ... } |
3차원 이상의 배열도 선언할 수 있지만, 3차원 이상 배열의 쓰임은 드뭅니다. 3차원 배열은 2차원 배열에 높이를 더해 높이, 세로, 가로로 이뤄집니다.
int형 요소가 세로가 3, 가로가 4인 배열을 선언하는 예는 다음과 같습니다
|
그리고 왼쪽의 문장으로 인해서 선언되는 배열의 형태는 다음과 같습니다.
|