본문 바로가기
C 언어 프로그래밍/배열

2차원 배열

by 프밍샘 2020. 6. 7.

2차원 이상의 배열을 다차원 배열이라고 합니다. 2차원 배열은 1차원 배열을 겹겹이 쌓아 놓은 형태이며 수학의 행렬과 같은 구조를 가집니다. 이번 페이지에서는 2차원 배열에 대해 알아보겠습니다.

 

 

 

2차원 배열의 선언

 

자료형 배열명[행의 수][열의 수];

int num[4][6];

 

num[0][0] num[0][1] num[0][2] num[0][3] num[0][4] num[0][5]
num[1][0] num[1][1] num[1][2] num[1][3] num[1][4] num[1][5]
num[2][0] num[2][1] num[2][2] num[2][3] num[2][4] num[2][5]
num[3][0] num[3][1] num[3][2] num[3][3] num[3][4] num[3][5]

 

2차원 배열도 1차원 배열과 마찬가지로 배열의 인덱스(Index)를 통해 접근 가능하며, 인덱스는 행과 열 모두 0부터 시작합니다. 실제 메모리 공간에는 위의 그림과 같이 연속적인 구조로 할당되며 모두 4Byte*4*6=96Byte의 크기를 가집니다.

 

 

 

 

2차원 배열의 초기화

 

초기화값은 행 단위로 차례대로 저장되며, 배열의 크기보다, 초기화한 값이 적으면 남은 공간은 0으로 초기화됩니다. 또한, 1차원 배열과 마찬가지로 int num[ ][6];과 같이 행의 크기는 생략할 수 있으며 초기화된 값에 따라 행의 크기가 결정됩니다. 행의 크기만 생략 가능하며, 열의 크기를 생략한 경우에는 오류가 발생합니다. 다음은 2차원 배열의 다양한 초기화 유형을 나타내었습니다. 

 

 

int num[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};

1 2 3
4 5 6
7 8 9

 

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

1 2 3
4 0 0
0 0 0

 

int num[3][3]={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

1 2 3
4 5 6
7 8 9

 

int num[3][3]={{1}, {4, 5}, {7, 8, 9}};

1 0 0
4 5 0
7 8 9

 

int num[ ][3]={{1}, {4, 5}, {7, 8, 9}};

1 0 0
4 5 0
7 8 9

 

int num[ ][3]={1, 4, 5, 7, 8, 9};

1 4 5
7 8 9

 

다음은 2차원 배열에 초기화 된 정수를 출력하는 프로그램입니다. 1차원 배열은 하나의 for문을 이용하여 출력할 수 있지만 2차원 배열의 경우 2개의 인덱스가 있으므로 중첩 for문을 이용하여 출력이 가능합니다.

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

출력 결과

 

 

 

 

 

문자열의 초기화

 

문자열은 각 문자단위로 1차원 배열에 넣고, 마지막에 null문자를 넣어서 처리합니다. 1차원 배열에는 하나의 문자열만 들어가므로, 여러 개의 문자열을 처리하는 경우는 2차원 배열을 이용합니다.

 

char name[4][5]={"John", "Alex", "Eli", "Owen"};

J o h n \0
A l e x \0
E l i \0 \0
O w e n \0

 

#include <stdio.h>
int main()
{
	int i, j;
	char name[4][5]={"John", "Alex", "Eli", "Owen"};
	
	for(i=0;i<4;i++)
	{
		for(j=0;j<5;j++)
		{
			printf("%c", name[i][j]);
		}
		printf("\n");	
	}
	return 0;
}

출력결과

 

 

위의 문자열 배열을 변환문자 %s를 이용하여 출력하는 프로그램입니다. %s는 하나의 문자열을 출력하므로 4개의 문자열을 출력하기 위해서는 for문을 4회 반복하면 됩니다. %c와 %s의 출력방법이 어떻게 다른지 비교하여 보시기 바랍니다.

#include <stdio.h>
int main()
{
	int i;
	char name[4][5]={"John", "Alex", "Eli", "Owen"};
	
	for(i=0;i<4;i++)
	{
		printf("%s\n", name[i]);
	}
	return 0;
}

출력결과

 

 

 

 

 

 

2차원 배열 예제

 

(1단계) 예제1: 2차원 배열 출력

 

#include <stdio.h>
int main()
{
	int i, j;
	int num[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};

	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("%d\t", num[i][j]);
		}
	}
	
	return 0;
}

 

 

 

 

 

(1단계) 예제2: 학번과 이름 출력하기

 

#include <stdio.h>
int main()
{
	int i, j;
	int num[2][3]={{2501, 2502, 2503}, {2601, 2602, 2603}};
	char name[6][7]={"김길동", "이길동", "홍길동", "최길동", "박길동", "정길동"};
	
	printf("학번\t");
	for(i=0;i<2;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("%d\t", num[i][j]);
		}
	}
	
	printf("\n이름\t");
	for(i=0;i<6;i++)
	{
		printf("%s\t", name[i]);
	}
	
	return 0;
}

 

 

 

 

 

 

 

 

(1단계) 예제3:  문자열을 입력받고 출력하기

 

#include <stdio.h>
int main()
{
	int i;
	char name[5][10];
	
	for(i=0;i<=4;i++)
	{
		printf("%d번 학생의 이름을 입력하시오:", i+1);
		scanf("%s", name[i]);
	}

	for(i=0;i<=4;i++)
	{
		printf("%d번\t%s\n", i+1, name[i]); 
	} 
	
	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'C 언어 프로그래밍 > 배열' 카테고리의 다른 글

배열과 문자열  (2) 2020.06.07
1차원 배열  (0) 2020.06.06

댓글