본문 바로가기
개발&코딩/C

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

by 우동이 2020. 7. 27.
300x250

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는 포인터 배열이며

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

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

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

 

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

300x250

댓글