Chapter 12. 배열
배열 동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조 동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조
배열의 선언 자료형 배열이름 [ 배열크기 ]; int array[100]; int array[0]; int array[1]; … int array[99];
배열의 원소와 첨자 배열 원소 배열에 저장되는 각각의 항목 배열 원소는 첨자 (index) 를 사용하여 참조 예. 정수형 10 개짜리 배열 score int score[10]; score 의 첫번째 원소 = score[0]; 배열 첨자는 유효한 값의 범위를 벗어나는 경우, 문제 발생 첨자 범위 : 0 ~ ( 배열크기 -1)
배열의 초기화 값의 초기화 int array[5] = {10, 20, 30, 40, 50}; int array[0] = {10}; int array[1] = {20}; int array[2] = {30}; int array[3] = {40}; int array[4] = {50};
배열 초기화 배열 초기화 방법 배열의 초기화에서 배열의 크기는 생략 가능 이 경우, 초기값을 넣는 개수에 따라 배열의 크기가 결정 지정된 배열의 크기가 초기 값 개수보다 크면 나머지 지 정되지 않은 원소의 초기 값은 자동으로 모두 0 으로 저 장 int array[] = {10, 20}; int array[0] = {10}; int array[1] = {20}; int array[4] = {10, 20}; int array[0] = {10}; int array[1] = {20}; int array[2] = {0}; int array[3] = {0};
배열의 크기 int array1[5] = {1, 2, 3, 4, 5}; // 배열의 크기 = 5 int array2[] = {1, 2, 3, 4, 5, 6, 7, 8, …}; // 배열의 크기 = ? // sizeof 함수 이용 // 배열의 전체 사이즈 / int 형 사이즈 = sizeof(array2) / sizeof(int)
다차원 배열 m X n 배열 a[0][] a[1][] 실제 메모리
다차원 배열 초기화 다차원 배열 초기화 유의사항 이차원 배열을 선언하는 경우, 초기화를 하지 않고 선언 만 한다면 배열의 크기는 행과 열, 두 개 모두 반드시 지 정되어야 한다. 선언을 하면서 초기 값을 저장하면 첫 번째 크기는 지정 하지 않을 수 있다. 다음의 경우는 에러 int array[2][4] = {10, 30, 40, 50, 1, 3, 0, 0}; int array[][4] = {10, 30, 40, 50, 1, 3, 0, 0}; int array[2][4] = {{10, 30, 40, 50}, {1, 3, 0, 0}}; int array[][4] = {{10, 30, 40, 50}, {1, 3, 0, 0}}; // 이 경우 다차원 배열의 범위를 알 수 없다. int array[][] = {10, 30, 40, 50, 1, 3, 0, 0};
다차원 배열 m X n X l 삼차원 배열 3 차원 배열의 각 원소를 참조하기 위해 3 개의 첨자를 이용 3 차원 배열 초기화 int array[2][2][2] = {1,2,3,4,5,6,7,8}; int array[0][0][0] = {1}; int array[0][0][1] = {2}; int array[0][1][0] = {3}; int array[0][1][1] = {4}; int array[1][0][0] = {5}; int array[1][0][1] = {6}; int array[1][1][0] = {7}; int array[1][1][1] = {8};
함수 인자로서의 배열 #include double average(double array[], int size); int main() { double score[6] = { 98.12, 54.43, 88.91, 76.33, 64.91, }; double avg; avg = average(score, 6); printf(" 평균은 : %f\n", avg); return 1; } double average(double array[], int size) { double sum = 0.0; int i; for (i = 0; i < size; i++) { sum += array[i]; } return (sum/size); }
문자열 문자열 (string) 문자들의 배열 “” 로 둘러싸서 표기 예. “C language” C 언어에서는 문자열에 대한 자료형은 없음 1 차원 문자 배열을 이용 문자열을 저장하는 배열의 크기는 반드시 저장되는 문자 의 개수보다 1 이 커야 함 문자열의 마지막은 널 문자 (null character, ‘\0’) 가 저장됨
문자열의 초기화 다음과 같이 직접 문자열을 초기화 가능 문자의 배열 형태로 초기화할 때 주의 !! 배열의 마지막에 널문자 ‘\0’ 를 꼭 넣어주어야함 char c[4] = {‘a’, ‘b’, ‘c’, ‘\0’};
문자열의 출력 문자열 출력을 위한 printf 변환 명세 - %s 배열 이름이 문자열 자체를 나타낸다고 생각 배열의 첨자를 이용하여 문자 각각을 출력 문자이기 때문에 printf 의 변환 명세 %c 사용 char s[10] = “C Language!”; printf(“%s”, s); int i = 0; char s[10] = “C Language!”; for(i=0; i<10; i++) { printf(“%c”, s[i]); }
문자열의 입력 함수 scanf 를 이용한 문자열 입력 입력받을 배열 명 앞에 ‘&’ 를 붙이지 않는다 ! 공백 ( 스페이스 ) 이 없는 문자열을 표준입력으로 받아 문 자 배열에 저장 함수 scanf() 에서 %s 의 변환 명세로 입력 받는 문자열은 문자가 시작되고 공백이 나오기 이전까지의 문자열을 입력받음 한글을 입력하려면 2 바이트가 필요하므로 충분한 저장공간을 확 보 char name[20] = {‘\0’}; printf(“ 이름을 입력하세요 ; “); scanf(“%s”, name); printf(“ 나의 이름은 %s 입니다. \n”, name);
문자열 입출력에 특성화된 함수 함수 gets, puts gets( 문자열 ) – 문자열 입력 함수 puts( 문자열 ) – 문자열 출력 함수한 줄에 입력되는 모든 문자열을 입력하 고 출력하기 위한 함수가 gets() 와 puts() stdio.h 시스템 헤더 파일에 정의되어 있음 함수 gets() 는 공백단위 없이 키보드의 엔터 (Enter) 명령이 들어올때 까지 입력 받음 char name[20] = {‘\0’}; printf(“ 이름을 입력하세요 ; “); gets(name); puts(name);
실습 – 배열 시프트 문자형 크기 10 인 배열 array 를 선언 array 의 초기 값은 “abcdefghij” array 배열의 값을 왼쪽으로 한칸 shift 하여 출력 하는 shiftArray 함수 구현 예. 왼쪽으로 한칸 shift “abcedfghij” “bcdefghija”