초보자들이 이해할수 있도록 짠 배열의 크기를 동적으로 늘려가는 방법이다.
물론 STL을 사용한다면 훨씬 자유롭게 코딩을 할수 있지만 그 전에라도
초보자들이 사용할 수 있는 유용한 방식이 될 수 있다고 본다.
아래 프로그램에서는 동적으로 할당받은 공간의 맨 앞방을 크기를 나타내는 용도로
사용하였다. 실제로 사용하는 배열은 1번째 방부터 사용한다. 그렇게 하면 인덱스의
사용에 문제가 있으므로 배열의 시작점을 1번째 방부터 하도록 하였다.
그래서 배열의 크기를 나타낼 때에는 -1이라는 인덱스를 사용하게 된다.
설명은 복잡하게 보일지 모르지만 코드는 간단하다 한번 보도록 하자
입력의 끝을 나타낼 경우에는 q를 주도록 한다.
#include <stdio.h>
#include <stdlib.h>
int *creat() { // 테스트를 위해서 일부러 작은 크기 5을 주었음
int *temp;
temp=(int*)malloc(6*sizeof(int));
temp[0]=5;
printf("new size: %d ", temp[0]);
return &temp[1];
}
int *enlarge(int *arr) { // 크기가 5씩 증가함
int *temp;
int size=arr[-1];
int i;
temp=(int*)malloc((size+5+1)*sizeof(int));
temp[0]=size+5;
for(i=0;i<size;++i)temp[i+1]=arr[i];
free (&arr[-1]);
printf("new size: %d ", temp[0]);
return &temp[1];
}
int size4(int *arr) {
return arr[-1];
}
int main() {
int i, n, x;
int *arr;
arr=creat();
printf("arr=0x%p\n",arr);
i=0;
while(1) {
printf("입력: ");
n=scanf("%d", &x);
if(n==0) break;
arr[i++]=x;
if(size4(arr)<=i) {
arr=enlarge(arr);
printf("arr=0x%p\n",arr);
}
}
n=i;
for(i=0;i<n;i++) printf("%d ",arr[i]);
free(&arr[-1]);
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
순환 카운트함수를 비순환 카운트함수로 (0) | 2012.04.27 |
---|---|
차집합을 구하는 프로그램 (0) | 2012.04.23 |
하노이탑의 움직임을 배열을 이용하여 보여주기. (0) | 2012.04.21 |
2진수의 자리이동 (0) | 2012.04.19 |
중위표기법의 입력문제 (0) | 2012.04.16 |