1.기본 개념
배열(array)은 같은 데이터형 변수를 메모리에 연속적으로 할당하고 같은 이름으로 이용이 가능한 방법이다.
기본적인 형식은 위와 같다.
배열의 값에 접근할 때는 인덱스(index)를 이용하는데 인덱스는 같은 이름의 배열 중에서 몇 번째 원소인지를 나타내는
것이다. 주의할 점은 인덱스는 0부터 시작하고 하나씩 증가한다는 것이다. 예를 들어 int arr[5]라는 배열은 크기가 5이고
원소 arr[0], arr[1], arr[2], arr[3], arr[4]를 포함하는 총 5개의 원소로 이루어진 배열이다. 인덱스가 0부터 시작하기
때문에 마지막 원소의 인덱스는 '배열의 크기 -1'이 된다. 참고로 인덱스는 리터럴 상수나 매크로 상수는 가능하나
변수는 불가능하다.
배열도 변수의 집합이므로 초기화 해주지 않으면 쓰게기 값을 갖게 되므로 선언 시 초기화 해주는 것이 여러모로 좋다.
배열을 초기화 해주는 방법은 {}을 이용해서 초기 값을 선언해주면 된다. double sum[2] = {0,1};과 같이 선언해주면
sum[0]=0; sum[1]=1;로 초기화 해준 것이다. 그런데 double sum[2] = {};과 같이 공백으로 비워두면 초기 값을
지정하지 않아 컴파일 에러가 발생한다. 전체를 0으로 초기화 하려면 double sum[2] = {0};으로 하면 된다.
위의 표에서 double sum[10] = {1,2,3};은 sum[0]=1; sum[1]=2; sum[2]=3;이고 sum[3]~[9]=0;이 된다.
int exam[] = {100,200,300};의 경우에는 배열의 크기가 지정되지 않았지만 초기화를 해준 값을 토대로 자동으로 크기를
지정해준다. 즉, int exam[3] = {100,200,300};으로 선언된 것이다. 그리고 당연히 배열의 크기보다 많은 초기 값을
선언하면 에러가 발생한다. 참고로 int arr[5]; int size = sizeof(arr)/sizeof(arr[int]);와 같이 선언해서 배열의 원소의
개수, 즉 배열의 크기를 구할 수 있다. 5(배열의 크기) x 4(int형=4바이트) 이므로 배열의 전체를 20바이트이다. 따라서
20/4=5이므로 크기를 구할 수 있다.
2.다차원 배열
가장 기본적인 다차원 배열로 이차원 배열의 형태는 아래와 같다.
이차원 배열은 제1크기x제2크기만큼 메모리에 할당된다.
int score [2][3];은 3개씩 2묶음이라고 생각하면 된다. 즉, 2명의 학생에 대한 국어, 영어, 수학의 점수를 저장하는 배열로
적합하다. 이유를 살펴보면 다음과 같다. 이차원 배열에 접근 할 때는 가장 오른쪽 인덱스부터 증가한다.
int score [2][3];에서
score [0][0];
score [0][1];
score [0][2];
score [1][0];
score [1][1];
score [1][2];
위와 같이 오른쪽 인덱스부터 증가하고 그 다음 왼쪽 인덱스가 증가한다. 따라서 제1인덱스가 0(학생A)일 때 제2인덱스
0(국어), 1(영어), 2(수학)이라고 생각하면 쉽다.
이차원 배열의 초기화도 {}을 이용하며 묶음 단위로 {}로 묶는다.
ex) int score [2][3] = {{1,2,3},{4,5,6}}; //3개씩 2묶음
int score [2][3] = {1,2,3,4,5,6}; //이 형태도 위와 같은 의미
int score [2][3] = {{1,2},{3,4}}; //{{1,2,0},{3,4,0}}으로 초기화
int score [2][3] = {{1,2,3,4}}; //{1,2,3,4,0,0}으로 초기화
이차원 배열의 초기화 시에도 배열의 크기가 생략 가능하지만 반드시 제1크기만 생략 가능하다.
ex) int score [][3] = {1,2,3,4,5,6}; //int score [2][3];으로 인식
int score [2][] = {1,2,3,4,5,6}; //몇 개짜리 3묶음인지 알 수 없어서 에러
C 언어에서는 이차원 배열뿐 만 아니라 삼차원, 사차원 배열도 지원한다. 다차원 배열이라고 부르는 것에서 알 수 있듯이
특별히 차수에 대한 제한을 두지 않는다.
배열(array)은 같은 데이터형 변수를 메모리에 연속적으로 할당하고 같은 이름으로 이용이 가능한 방법이다.
형식 : 데이터형 배열명 [크기] = {초기값1, 초기값2, ...}; ex) int arr[5] = {1,2,3,4,5}; double sum[10] = {1,2,3}; int exam[] = {100,200,300}; |
배열의 값에 접근할 때는 인덱스(index)를 이용하는데 인덱스는 같은 이름의 배열 중에서 몇 번째 원소인지를 나타내는
것이다. 주의할 점은 인덱스는 0부터 시작하고 하나씩 증가한다는 것이다. 예를 들어 int arr[5]라는 배열은 크기가 5이고
원소 arr[0], arr[1], arr[2], arr[3], arr[4]를 포함하는 총 5개의 원소로 이루어진 배열이다. 인덱스가 0부터 시작하기
때문에 마지막 원소의 인덱스는 '배열의 크기 -1'이 된다. 참고로 인덱스는 리터럴 상수나 매크로 상수는 가능하나
변수는 불가능하다.
배열도 변수의 집합이므로 초기화 해주지 않으면 쓰게기 값을 갖게 되므로 선언 시 초기화 해주는 것이 여러모로 좋다.
배열을 초기화 해주는 방법은 {}을 이용해서 초기 값을 선언해주면 된다. double sum[2] = {0,1};과 같이 선언해주면
sum[0]=0; sum[1]=1;로 초기화 해준 것이다. 그런데 double sum[2] = {};과 같이 공백으로 비워두면 초기 값을
지정하지 않아 컴파일 에러가 발생한다. 전체를 0으로 초기화 하려면 double sum[2] = {0};으로 하면 된다.
위의 표에서 double sum[10] = {1,2,3};은 sum[0]=1; sum[1]=2; sum[2]=3;이고 sum[3]~[9]=0;이 된다.
int exam[] = {100,200,300};의 경우에는 배열의 크기가 지정되지 않았지만 초기화를 해준 값을 토대로 자동으로 크기를
지정해준다. 즉, int exam[3] = {100,200,300};으로 선언된 것이다. 그리고 당연히 배열의 크기보다 많은 초기 값을
선언하면 에러가 발생한다. 참고로 int arr[5]; int size = sizeof(arr)/sizeof(arr[int]);와 같이 선언해서 배열의 원소의
개수, 즉 배열의 크기를 구할 수 있다. 5(배열의 크기) x 4(int형=4바이트) 이므로 배열의 전체를 20바이트이다. 따라서
20/4=5이므로 크기를 구할 수 있다.
2.다차원 배열
가장 기본적인 다차원 배열로 이차원 배열의 형태는 아래와 같다.
형식 : 데이터형 배열명 [제1크기][제2크기]; ex) int score [2][3]; |
이차원 배열은 제1크기x제2크기만큼 메모리에 할당된다.
int score [2][3];은 3개씩 2묶음이라고 생각하면 된다. 즉, 2명의 학생에 대한 국어, 영어, 수학의 점수를 저장하는 배열로
적합하다. 이유를 살펴보면 다음과 같다. 이차원 배열에 접근 할 때는 가장 오른쪽 인덱스부터 증가한다.
int score [2][3];에서
score [0][0];
score [0][1];
score [0][2];
score [1][0];
score [1][1];
score [1][2];
위와 같이 오른쪽 인덱스부터 증가하고 그 다음 왼쪽 인덱스가 증가한다. 따라서 제1인덱스가 0(학생A)일 때 제2인덱스
0(국어), 1(영어), 2(수학)이라고 생각하면 쉽다.
이차원 배열의 초기화도 {}을 이용하며 묶음 단위로 {}로 묶는다.
ex) int score [2][3] = {{1,2,3},{4,5,6}}; //3개씩 2묶음
int score [2][3] = {1,2,3,4,5,6}; //이 형태도 위와 같은 의미
int score [2][3] = {{1,2},{3,4}}; //{{1,2,0},{3,4,0}}으로 초기화
int score [2][3] = {{1,2,3,4}}; //{1,2,3,4,0,0}으로 초기화
이차원 배열의 초기화 시에도 배열의 크기가 생략 가능하지만 반드시 제1크기만 생략 가능하다.
ex) int score [][3] = {1,2,3,4,5,6}; //int score [2][3];으로 인식
int score [2][] = {1,2,3,4,5,6}; //몇 개짜리 3묶음인지 알 수 없어서 에러
C 언어에서는 이차원 배열뿐 만 아니라 삼차원, 사차원 배열도 지원한다. 다차원 배열이라고 부르는 것에서 알 수 있듯이
특별히 차수에 대한 제한을 두지 않는다.
'프로그래밍 > C' 카테고리의 다른 글
배열과 포인터의 관계 (0) | 2010.10.09 |
---|---|
포인터 (Pointer) (0) | 2010.10.09 |
선택정렬 (Selection Sort) (0) | 2010.10.09 |
비트 연산자 (0) | 2010.10.03 |
삼각형 출력하기 (0) | 2010.10.03 |
형변환 (type conversion) (0) | 2010.10.03 |
삼항 연산자를 이용한 최대값 구하기 (0) | 2010.10.03 |