1. 1차원 배열
가. 배열
같은 자료형을 가진 자료들을 나열하여 메모리에 연속으로 저장하여 만든 자료들의 그룹
요일을 나타내는 월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일을 각각 변수로 선언하면 변수를 일곱 개 만들어 개별적으로 사용해야 함.
하지만 하나로 묶어 배열로 만들면 배열을 한 번만 선언해 만들 수 있고, 각 요일이 배열의 요소가 되어 다루기가 편해짐.
1) 인덱스(Index)란?
배열의 요소를 간단히 구별하기 위해 사용하는 번호
C언어에서 인덱스는 항상 0부터 시작함.
특정 배열 요소를 사용할 경우에는 '배열이름[배열요소의 인덱스]'로 지정하고 변수처럼 사용 가능
모든 자료형은 배열로 구성 가능
구성 형태에 따라 1차원 배열, 2차원 배열, 3차원 배열 등 다차원 배열로도 구성할 수 있음.
2) 1차원 배열 선언 형식
자료형 배열이름 [배열요소의 개수];
배열의 자료형을 선언한다. 배열 요소는 모두 자료형이 같아야 하고, 배열 요소의 자료형이 배열의 자료형이 된다.
변수 이름과 같은 규칙으로 정한다.
대괄호([])를 사용해 배열 요소의 개수를 표시하는데, 배열 요소 개수가 배열의 크기이다. 배열을 선언하면 메모리에 배열에 대한 공간이 할당되고 그 크기는 '자료형에 대한 메모리 할당 크기 X 배열 요소의 개수'이다.
변수 이름은 영문자(대소문자 구분), 숫자, 밑줄을 사용하며, 첫 글자에 숫자를 사용할 수 없다.
키워드나 예약어는 변수 이름으로 사용할 수 없다.
3) 1차원 배열의 초기화
초기값 리스트에는 초기값을 쉼포로 구분하여 나열하고, 초기값들은 각 배열 요소에 순서대로 지정됨.
배열 크기보다 초기값을 적게 지정하면 나머지 배열 요소는 기본값 0이 할당됨.
배열 크기보다 초기값을 크게 지정하면 모두 메모리에는 할당되지만 배열 영역 밖이므로 사용할 수 없는 값이 됨.
자료형 배열이름[배열크기] = { 초기값1, 초기값2, ... }
2. 문자 배열
가. 문자 배열
문자를 나열한 것을 의미함.
"와 "사이에 표시
문자열을 저장하기 위해서는 문자열을 구성하는 문자들을 연속적으로 저장해야 하기 때문에 char형 배열을 사용함.
배열의 자료형은 문자 자료형(char)
문자 배열의 초기화는 문자열 그대로 지정하거나 초기값 문자 리스트를 사용함.
나. 문자배열을 문자열 "String"으로 초기화하는 예
문자열이 저장될 때는 문자열의 끝을 나타내는 "\0"이 마지막에 추가되기 때문에 문자열을 저장할 메모리 크기는 실제 문자열 크기보다 1바이트가 더 커야 함.(안 그러면 저장 공간 부족으로 컴파일 오류 발생)
char s1[10] = "String"; // s1[6]에 \0 할당
char s2[10] = {'S', 't', 'r', 'i', 'n', 'g'}; // s2[6]에 할당 없음
3. 다차원 배열
가. 다차원 배열의 선언
배열의 차수 만큼 [배열크기] 항목을 추가
나. 2차원 배열의 선언 형식
2차원 배열의 선언 형식은 배열의 배열이므로 선언은 1차원 배열과 같은 형식
늘어난 차수만큼 대괄호([])를 추가하고 그 안에 배열 크기를 지정함.
2차원 배열은 차수가 2이므로 배열의 배열을 의미
자료형 배열이름[배열크기(행)][배열크기(열)];
다. 3차원 배열의 선언 형식
자료형 배열이름 [배열크기(면)][배열크기(행)][배열크기(열)];
라. 다차원 배열의 초기화
초기값의 지정 형태는 다차원 배열이 배열의 배열이라는 것을 생각하여 초기값을 구분하여 지정하거나, 1차원 배열처럼 초기값 리스트를 지정하여 순서대로 배열 요소의 초기값으로 설정
int i[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 가장 기본적인 방법
int i[2][3] = {1, 2, 3, 4, 5, 6}; // 알아서 물리적 구조에 맞게 할당
int i[][3] = {{1, 2, 3}, {4, 5, 6}};
int i[][3] = {1, 2, 3, 4, 5, 6}; // 첫 번째 배열의 크기 생략해도 가능
마. 문자 다차원 배열
문자 배열 역시 1차원 배열이므로 묶어서 다차원 배열로 구성할 수 있음.
strcpy 함수를 사용해서 저장할 수도 있음.("=" 연산자 사용 불가)
char c[3][20] = {
"Hong Gil Dong",
"Computer Department",
"Seoul Korea"
};
strcpy(c[0], "Hong Gil Dong");
strcpy(c[1], "Computer Department");
strcpy(c[2], "Seoul Korea");