[C언어] 배열

Programming/C

2015. 1. 17. 21:52 - gold5230




관리할 데이터가 서너개 정도면 변수를 a, b, c, d 식으로 써도 되겠다.

그렇지만 수백개, 아니 수십개만 되어도 당연히 이런 방식에는 한계가 있다. 배보다 배꼽이 더 커진다.

그럴때 우리가 '배열'(Array)을 사용할 수 있다. 

변수 하나가 단독주택이라면, 배열은 아파트라고 할수 있겠다.

 

1
int score[10];
cs

 

배열은 위처럼 선언한다. int형 변수 10개를 가지는 배열이며, 이름은 score이다.

그 결과, 메모리에 int형 변수 10개만큼의 공간이 연속적으로 할당되고, 그 공간의 첫번째 위치의 이름이 score가 된다.


배열은 선언한 이후에는 배열의 각 요소에 접근하기 위해 인덱스를 사용한다. 이것은 배열 내의 몇번째 변수인지 표시해 주는 도구라고 할 수 있겠다. C에서 인덱스는 0부터 시작한다.(매우 헷갈린다!)


즉 배열의 첫번째 값과 두번째 값을 더해 세번째 값에 넣으려면?


 

1
score[2] = score[0] + score[1];
cs

 

 

이렇게 되는것이다.

또한 배열을 선언하면서 값을 넣기 위해서는 아래와 같이 하면 된다.

1
2
int data[3] = { 000 };
int data[] = { 000 };
cs

 

밑의 코드의 경우에는 컴파일러가 알아서 데이터 갯수를 세어서 메모리를 할당해준다.

또한 이런식으로

1
int data[10] = { 11111 };
cs

배열의 선언한 크기보다 작은 갯수의 값을 넣었으면, 나머지 5개는 0으로 초기화된다.


또한 다차원 배열이라는 개념이 있다. 

 

1
int score[10][30];
cs

한 학년에 10반, 30명씩 학생들이 있다면 이렇게 배열을 선언해서 성적을 기록해볼 수 있겠다.

이건 2차원 배열이라고 한다. [행][열]으로 생각하면 되겠다.

고등학교라서 3학년까지 있다면?

 

1
int score[3][10][30];
cs

3차원 배열이라고 한다. 이론적으로는 무한차원 배열도 가능하겠지만, 보통 3차원 배열정도로 제한하며, 사실 3차원 배열도 잘 안쓴다.


그런데 다차원 배열이란 결국 배열의 배열이다.

 

 

 

 

 

 

 

 

 

 

우리 머리에는 [3][3]의 2차원 배열이 이렇게 생각된다만.


 

 

 

 

 

 

 

 

 

 

메모리에서 할당되는건 이렇다! 결국 하드웨어적으로 1차원 배열 arr[9]와 2차원 배열 arr[3][3]의 메모리 형태는 차이가 없다. 다루는 방법만 다르다. 또한 이렇게 생각하면 3차원 배열은 2차원 배열의 배열이고, 우리 머릿속에는 입체로 생각될 것이다.


다차원 배열은 다음과 같이 초기화할수 있다.

 

1
2
3
4
5
6
int arr[3][3] = 
{
    { 123 },
    { 456 },
    { 789 }
};
cs

물론 한줄로 해도 되지만, 가독성이란게 중요하니까.

물론 2차원 배열은 1차원 배열의 배열이고, 배열은 같은 자료형의 나열이므로 1차원 배열처럼 초기화해도 된다.

 

1
int arr[3][3] = { 123456789 };
cs

또한 마찬가지로 명시적으로 초기화하지 않은 부분은 0으로 초기화된다.


문자 배열은 앞에서 특별히 다뤘으니까...

그리고 배열의 입력/출력은 반복문을 통해서 하면 간편하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int arr[3][3] = 
{    
    { 123 },
    { 456 },
    { 789 }
};
 
for(int i = 0; i < 3; i++) 
{
    for(int j = 0; j < 3; j++)
    {
        printf("%d ", arr[i][j]);
    }
    printf("\n");
}
cs

1 2 3

4 5 6

7 8 9

식으로 출력될 것이다.



'Programming > C' 카테고리의 다른 글

[C언어] 포인터  (0) 2015.01.23
[C언어] 함수  (0) 2015.01.17
[C언어] 반복문(for, while)  (0) 2015.01.17
[C언어] 분기문(if, switch)  (0) 2015.01.17
[C언어] 연산자와 연산자 우선순위  (0) 2015.01.17