C언어에서 2차원 배열의 형태가 몇 가지 있는데
(1) 행(row)이 고정 갯수, 열(column)이 고정 갯수 일때
- '2차원 배열'을 이용하면 되고
- 예) int [3][5]
(2) 행(row)이 고정 갯수, 열(column)이 가변 갯수 일때
- '포인터의 배열'을 이용하면 되고
- 예) char *pArr[5]
- '배열의 포인터'를 이용하면 되고
- 예) char (*pArr)[10]
(4) 행(row)이 가변 갯수, 열(column)이 가변 갯수 일때
- 2차원 포인터를 이용하면 된다
- 예) char **ptr
아래는 배열의 포인터를 이용해서 2차원 배열에 값을 저장하고 출력하는 간단한 개념을 구현한 것이다.
이때 scanf라는 좀 독특한 성격의 함수에 어떻게 값을 입력해 주어 2차원 배열에 값을 저장하는지를 예제로 보여주는 코드이다.
#include <stdio.h>
#include <malloc.h>
#define LESSONS 3
int main(void)
{
int l, s;
int sum;
int students;
char *lssn[] = {"Korean", "English", "Math"};
//2차원 배열. '배열의 포인터'
//'배열의 포인터'는 2차원 배열 중에서 열(column)은 고정 갯수이고
//행(row)는 가변 갯수일 때 사용할수 있는 2차원 배열의 형태이다.
int(*score)[LESSONS] = NULL;
printf("학생 수를 입력하세요 : ");
scanf("%d", &students);
score = (int(*)[LESSONS])malloc(students * sizeof(int[LESSONS]));
//score = (int(*)[3])malloc(sizeof(int[LESSONS]) * students);
for (s = 0; s < students; s++)
{
printf("%d번째 학생의 점수 : ", s + 1);
for (l = 0; l < LESSONS; l++)
{
//scanf함수는 공백이 있는 곳까지 읽거나 엔터 키까지 읽거나
//혹은 탭문자까지 읽는 성질머리를 가진 함수이다.
scanf("%d", &score[s][l]);
printf("%d, %d ==> %d\n", s, l, score[s][l]);
}
}
printf("%d\t", score[0][0]);
printf("%d\t", score[0][1]);
printf("%d\n", score[0][2]);
free(score);
return 0;
}
위를 실행하면 다음과 같은 결과를 출력한다.
이때 for문 안에서 scanf 값을 11 22 33과 같이 값을 입력한 후 엔터키를 치면 안쪽 for문이 한 바퀴 돌면서 2차원 배열에 값을 저장한다.
만일 다음과 같이 해도 결과는 동일하다.
11
22
33
혹은 11(탭키)22(탭키)33(엔터)
'C' 카테고리의 다른 글
C언어에서 2차원 배열인 "포인터의 배열"에 대해서 (0) | 2016.08.03 |
---|---|
구조체 변수와 구조체 포인터 변수의 멤버변수 접근법 (0) | 2016.07.28 |
C언어에서 enum 사용하기 (0) | 2016.07.27 |
구조체 2차원 포인터(2차원 배열) (0) | 2016.07.18 |