ipwn

C) 배열, 2차원 배열이란? 본문

Programming

C) 배열, 2차원 배열이란?

ipwn 2017. 12. 18. 14:45

1. 배열


배열이란??


동일한 특성을 가지며 일정한 규칙에 따라 몇몇 요소가 나열되어 있는 데이터 집합


배열은 차원을 가지며, 1차원의 목록 또는 벡터, 


2차원의 테이블 또는 행렬 등은 컴퓨터에서는


배열로서 표현되어 처리된다고 합니다.

이해가 어려울 수 있어서 덧붙여보자면 프로그래밍을 공부하다보면 


가끔식 데이터를 한번에 많이 저장해야 하는 경우


(전교생의 시험점수를 입력받아서 평균을 출력해낸다거나 등등)


가 생기는 걸 알 수 있는데요, 


아래 코드는 저장하는 데이터수가 17개라는 


그렇게 많지않은 수지만 꽤 긴 길이가 생깁니다.


그러니 만약 10000개이상의 데이터를 하나하나 타이핑해서 저장해준다면


데이터를 저장하는데에만 시간이 모두 소진이 되겠죠???


1
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;
cs


이렇게 사용할 데이터의 갯수가 많을 때 등등에


이용하는게 아래 사진같은 배열이라고 볼 수 있는데요,


1
int num[1000];
cs


일단 배열은 위의 사진같은 형태로 데이터를 저장합니다.

맨 위의 첫 번째 사진같은 경우는 일일이 타이핑을 해서 


a~q까지 데이터를 저장했는데도


17개밖에 데이터를 저장하지 못한 반면에 위 사진같이 배열을 활용해 데이터를 


저장하게 되면 한번에 무려 1000개의 데이터가 저장 됩니다.


(배열의 시작은 0부터이므로 num[1~1000]까지 저장 XX, 


num[0~999]까지 저장O)


배열의 값을 초기화 시켜 줄때는 아래의 방식과


1
int num[5]={0,};
cs


또 아래의 방식이 있는데요,


1
int num[5]={0,1,2,3,4};
cs


이 두개의 차이점은 첫번째 사진은 num[0~4]까지의 수를 전부 


0으로 초기화 시켜준 것이지만,


아래의 사진은 num[0~4]까지의 데이터를 0,1,2,3,4로 하나하나씩 


초기화 해 준 것입니다.


이 배열을 가지고 예제를 하나 만들어 보자면


1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main(){
    int i,a,result=0,num[1000];
    printf("더해 줄 숫자 갯수 입력 : ");
    scanf("%d",&a);
    for(i=0;i<a;++i){
        printf("더할 수 입력 : ");
        scanf("%d",&num[i]);
        result+=num[i];
    }
    printf("다 더해서 나온 값 : %d",result);
    return 0;
}
cs


대충 위 사진같이 만들 수 있는데요 위 코드를 실행하면



이런식으로 실행이 되는 간편하다면 간편하고 유용하게 사용한다면


엄청 유용하게 사용할 수 있는게 배열이라고 할 수 있습니다.

2. 2차원 배열


​위에서 배열을 설명할때 배열은 차원을 갖는다는 표현이 있는데요, 


그게 무엇인지 간단하게 설명을 하자면 


일단 배열은 크게 두가지로 나눌 수 있습니다.


위에서 설명드린 1차원 배열과 2차원 배열 이상의 다차원 배열이 있는데요,


제가 설명드릴 것은 2차원 배열입니다.


2차원 배열은 행렬이 있습니다.


1
int num[5][5];
cs


​일단 2차원 배열은 위와같은 형태로 데이터를 저장시켜주는데요, 


이것을 표로 그려보자면



(언제나 배열의 시작은 0인 것을 잊으면 안됨)


위 사진과 같은 형태라고 보시면 됩니다.


교실 테이블을 배치하는 것과 비슷하게 생기기도 한 것 같습니다.


2차원 배열의 초기화 방법은


1
int num[3][2]={{0,1},{1,2},{2,3}};
cs


위와같은 방식인데요 , 이걸 표로 만들어보면 아래사진처럼 된다는걸 알 수 있겠죠?



2차원 배열로 예제를 하나 만들어보면, 아래와같이 만들 수 있을 것입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
int main(){
    int n[8][9];
    int i,j;
    
    for(i=0;i<8;++i){
        printf("구구단 %d단 : ",i+2);
        for(j=0;j<9;++j){
            n[i][j]=(i+2)*(j+1); 
            printf("%3d",n[i][j]);
        }
        printf("\n");
    }
    return 0;
}
cs

위 코드를 실행시키면 아래의 결과가 출력됩니다.



이런 방식으로 사용 하는 것이 배열이라고 할 수 있습니다. 


사실 표현할 때에는 저렇게 표로 그려서 행렬이 있는 형태로 표현했지만, 


사실 실 메모리에서는 192차원 배열이더라도 1자로 주욱 늘어져 있습니다.

'Programming' 카테고리의 다른 글

C) 코드업 함수문제 풀이  (0) 2017.12.18
C) swap 함수 구현  (0) 2017.12.18
C) 포인터  (0) 2017.12.18
C) strlen, strcmp, strcpy 함수 조사 및 구현  (0) 2017.12.18
C) 함수란 ?  (0) 2017.12.18
Comments