안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
오늘은 배열의 세번째 시간입니다. 전 시간에 말씀드린 것과 같이 2차원배열에 대해서 알아보겠습니다.
2차원배열
1)2차원 배열의 선언
2차원 배열을 선언하는 방법은 1차원배열을 선언할 때 [] 를 더 붙여주면 됩니다. ex) int num[5][3]; 첫번 째 괄호는 행의 길이를 뜻하고 두번째 괄호는 열을 뜻합니다. 다음과 같이 저장공간이 마련 될 것입니다.
위와 같은 배열을 선언 하면 num[0][0] 부터 num[4][2]까지 15개의 int형 공간이 마련 됩니다.
2차원 배열을 초기화 하는 방법은 다음과 같이 초기화 할 수 있습니다.
int num[5][3] = {
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15}
};
예제를 통하여 알아 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include<stdio.h> int main(void) { int num[4][3]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) { num[i][j] = i + j; } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) { printf("%d", num[i][j]); } printf("\n"); } return 0; } | cs |
위의 소스를 실행하면 다음과 같이 출력 됩니다.
for 문에 의해 int 형 배열 num 에 값을 저장 후 출력하는 것입니다. 2중 for문은 배웠으니 아시죠 ? 실행결과를 천천히 따라서 보시면 될 거 같습니다.
1차원 배열의 크기를 구할 때 어떻게 구하였는지 기억하시나요 ??? 네! sizeof(배열이름)으로 구하였습니다. 2차원 배열의 크기도 마찬가지 입니다. sizeof(배열이름) 을 하면 2차원배열의 크기를 구할 수 있습니다.
그렇다면 위에서 선언한 2차원 배열 num의 행의 길이와 열의 길이는 어떻게 구할 까요 ? 다음과 같이 구할 수 있습니다.
행의 길이 = 배열의 크기 / 행의 크기
열의 길이 = 행의 크기 / 열의 크기
배열의 크기는 구했는데 행의 크기나 열의 크기는 어떻게 구할까요 ? 행의크기는 sizeof(행이름)으로 구할 수 있습니다. 그렇다면 num[4][3] 의 행의 크기는 sizeof(num[0]) 이겠죠? 열의 크기는 sizeof(num[0][0]) 입니다.
예제를 통하여 알아보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include<stdio.h> int main(void) { int num[4][3] = { 0 }; // 배열의 모든 요소를 0으로 저장 printf("배열의 크기는 %d 입니다.\n", sizeof(num)); printf("행의 크기는 %d 입니다.\n", sizeof(num[0])); printf("열의 크기는 %d 입니다.\n", sizeof(num[0][0])); printf("행의 길이는 %d 입니다.\n", sizeof(num) / sizeof(num[0])); printf("열의 길이는 %d 입니다.\n", sizeof(num[0]) / sizeof(num[0][0])); return 0; } | cs |
실행 결과를 보면 예상했던 대로 나오는 것을 알 수 있습니다.
2)문자열 배열
다음은 문자열 배열에 대해서 알아보겠습니다. 1차원 배열 하나에 문자열 하나를 저장 할 수 있으므로 여러개의 문자열을 하나의 묶음으로 저장하기 위해서는 2차원 char 배열이 필요합니다.
선언하는 방법은 다음과 같습니다.
char str[3][4] = {
"abc",
"def",
"ghi"
}
글자는 abc,def,ghi 처럼 3글자인데 char str[3][3] 으로 해주는게 아닐까 ? 1차원배열에서 배운것처럼 문자열은 \0(null 문자) 가 필요로 합니다. 그래서 char[3][4]로 선언해 주었습니다. 조심해 주셔야 합니다.
소스 코드를 통해서 보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include<stdio.h> int main(void) { char str[3][4] = { "abc", "def", "ghi" }; for (int i = 0; i < 3; i++) { printf("str[%d] = %s\n",i,str[i]); } printf("\n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("str[%d][%d] = %c\n", i, j, str[i][j]); } } return 0; } | cs |
위 소스의 실행 결과는 다음과 같습니다.
예상대로 나왔나요 ? str[0][3] 과 str[1][3], str[2][3] 은 null 문자가 입력된 것을 확인 하실 수 있습니다.
이상으로 2차원 배열에 대해서 알아 보았습니다.
다음시간에는 이때까지 배운 내용을 토대로 문제를 풀어보도록 하겠습니다.
수고하셨습니다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 연습문제(1) 답 (2) | 2017.04.14 |
---|---|
[C언어] 연습문제(1) (0) | 2017.04.14 |
[C언어] 배열(2)에 대해 알아보자. (1) | 2017.04.12 |
[C언어] 배열(1)에 대해 알아보자. (0) | 2017.04.11 |
[C언어] 반복문에 대해 알아보자. (2) | 2017.04.10 |