개발&코딩/C

[C] C 중급 2차원 배열과 포인터배열 예제

우동이 2020. 7. 27. 18:06

C의 배열(array)은 배열 자체 그대로 사용하기에는 응용력이 많이 떨어지는 문법입니다.

그래서 2차원 배열로 확장하여 사용하곤 하는데

2차원 배열은 행렬논리적 구조를 가지지만

실제 메모리의 기억공간에서는 1차원 배열의 형태로 존재합니다.

 

그럼 C 배열의 기본적인 초기화 및 사용법을 알아보겠습니다.


 2차원 배열의 선언 및 초기화

#include <stdio.h>

int main()
{
	int double_array[2][3]={{1,2,3},{4,5,6}};
	
	for(int i=0; i<2; i++)
	{
		for(int j=0; j<3; j++)
			printf("%d\t", double_array[i][j]);
		printf("\n");
	}
	return 0;
}
>>> 
1       2       3
4       5       6

int double_array[2][3] 는 2차원 배열입니다.

{{1,2,3}, {4,5,6}} 의 값을 가지고 있으며

2*3의 크기를 가지고 있습니다.

즉 원래 배열의 선언이 {} 괄호 내에 값만 삽입하는 형태였다면

2차원 배열은 {} 괄호내에 또 {} 괄호를 삽입한 형태입니다.

 

2차원 배열의 값을 출력하기 위해 이중 for문을 작성합니다.


2차원 배열예제1 - 3명의 학생들의 4과목 점수 계산

#include <stdio.h>

int main()
{
	double score[3][4];
	double avg[3];
	
	for(int i=0; i<3; i++){
		printf("네 과목 점수를 입력하시오 >> ");
		for(int j=0; j<4; j++){
			scanf("%lf", &score[i][j]);
			avg[i]+=score[i][j];
		}
	}

	for(int i=0; i<3; i++){
		avg[i]=avg[i]/4.0;
		printf("%d번째 학생의 평균 : %.0lf\n", i+1, avg[i]);
	}
	
	return 0;
}

>>>
네 과목 점수를 입력하시오 >> 10 20 30 40
네 과목 점수를 입력하시오 >> 37 28 94 10
네 과목 점수를 입력하시오 >> 32 84 37 19
1번째 학생의 평균 : 25
2번째 학생의 평균 : 42
3번째 학생의 평균 : 43

위 코드는 3명의 학생들의 각각 4과목 점수의 평균을 구하는 코드입니다.

2차원 배열의 값은 이중 for문을 통해 출력되며

배열 avg에는 각 학생들의 평균값을 넣어줍니다.


2차원 배열 예제 2 - 2차원 배열을 행, 열 별로 출력하기

#include <stdio.h>

int main()
{
	int yul[4][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
	int hang[5][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
	
	for(int i=0; i<4; i++){
		for(int j=0; j<5; j++){
			printf("%5d", yul[i][j]); 
		}
		printf("\n");
	}
	printf("\n\n");
	for(int i=0; i<4; i++){
		for(int j=0; j<5; j++){
			printf("%5d", hang[j][i]); 
		}
		printf("\n");
	}
	return 0;
}

>>>
    1    2    3    4    5
    6    7    8    9   10
   11   12   13   14   15
   16   17   18   19   20


    1    5    9   13   17
    2    6   10   14   18
    3    7   11   15   19
    4    8   12   16   20

yul과 hang은 각각 1부터 20까지 값이 들어가 있는 2차원 배열입니다.

이들을 각각 다른 순서로 이중 for문을 사용해 값을 출력합니다.

 


2차원 배열 예제 3 - 문자 배열 선언과 초기화

#include <stdio.h>

int main()
{
	char str[3][10]={"list","dict","exercise"};
	int count;
	
	count = sizeof(str)/sizeof(str[0]);
	
	for(int i=0; i<count; i++)
		printf("%s\n", str[i]);
		
	return 0;
}
>>>
list
dict
exercise

2차원 배열 str의 첫 번째 인자는 문자열의 개수,

두 번째 인자는 문자열의 길이를 담당합니다.

[3] = 문자열의 개수

[10]=각 문자열의 길이

 


2차원 배열 예제 4 - 포인터 배열 선언과 초기화

#include <stdio.h>

int main()
{
	const char *array[]={"hobbylist","class","is","best","of best"};
	int count;
	
	count = sizeof(array)/sizeof(array[0]);
	
	for(int i=0; i<count; i++)
		printf("%s\n", array[i]);
	
	
	return 0;
}
>>>
hobbylist
class
is
best
of best

const는 상수 예약어입니다.

char * array는 포인터 배열이며

초기화나 사용법은 동일합니다.

다만 선언 법에 *를 넣어줘야 한다는 것과

각 값이 포인터로 참조된다는 것의 차이점이 존재합니다.

 

또한 문자열 상수는 포인터로써 역할할 수 있습니다.