2차원 배열 동적할당.
Programming/C 2013. 2. 15. 02:02 |2차원 배열같은 동적할당으로 아파트의 층과 가구를 사용자로부터 입력받아 메모리를 동적으로 할당한다.
그리고 인원을 입력하여 총 인원수를 출력하는 프로그램.
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,j;
int height, width; //2차원 배열의 인덱스를 위한 변수.
int sum=0; //층당 인원 수.
int total=0; //아파트 총 인원 수.
int **arr; //2차원 배열의 동적할당을 위한 더블포인터.
printf("아파트 총 층수: ");
scanf("%d", &height);
arr = (int**)malloc(sizeof(int)*height); //arr의 열의 입력. arr[height][];
printf("층당 가구수: ");
scanf("%d", &width);
for(i=0; i<height; i++)
arr[i] = (int*)malloc(sizeof(int)*width); //이렇게하면 arr[height][width]와 같은 것이 된다.
for(i=0; i<height; i++)
{
printf("----- %d층 -----\n", i+1);
for(j=0; j<width; j++)
{
printf("%d층 %d호: ", i+1, j+1);
scanf("%d", &arr[i][j]);
sum += arr[i][j];
}
printf("\n%d층 총 인원: %d\n\n", i+1, sum);
total += sum;
sum = 0;
}
printf("아파트 총 인원: %d\n", total);
printf("arr[0][0]의 주소: %d\n", &arr[0][0]);
printf("arr[0][1]의 주소: %d\n", &arr[0][1]);
printf("arr[1][0]의 주소: %d\n", &arr[1][0]);
printf("arr[1][1]의 주소: %d\n", &arr[1][1]);
printf("arr[2][0]의 주소: %d\n", &arr[2][0]);
printf("arr[2][1]의 주소: %d\n", &arr[2][1]);
for(i=0; i<height; i++)
free(arr[i]); //메모리할당 했으면 반드시 해제도 해주어야 한다!!
free(arr);
return 0;
}
정확히 말하면 2차원배열이 아니다. 왜냐하면,
배열은 메모리가 순차적으로 있어야 하는데.. 각 원소들이 메모리공간에 일정하게 있는야 하는데
동적할당으로 메모리를 할당하면 메모리 공간이 일정하지 않다.
그래서, 정확히 2차원적 배열은 아니다.
결론, 2차원 배열처럼 활용할 수 있지만, 2차원 배열은 아니다!
그러면... 함수 전달할때는..?
2차원 배열이 아니니까 int**로 전달해주면 된다.
ex) void extendSize(int** pArr, ..., ...)
'Programming > C' 카테고리의 다른 글
수학 관련 함수 (0) | 2013.02.15 |
---|---|
ftell 함수와 rewind 함수 (0) | 2013.02.15 |
fprintf와 문자열 형식 (0) | 2013.02.15 |
조건부 컴파일 (0) | 2013.02.15 |
모듈화 프로그래밍 (Modular Programming) (0) | 2013.02.15 |