2010. 6. 11. 23:57ㆍprogramming/c
포인터와 malloc을 이용하면 run-time때 배열의 크기를 정할 수 있습니다.
상수로 배열의 크기를 정할 경우,
int arr[10]; 이같이 배열 선언을 하고
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
...
arr[9] = 10;
이렇게 값을 대입시키거나
scanf(“%d”, &arr[0]); 이런식으로 사용자로부터 값을 입력받게 됩니다.
반면,
포인터와 malloc을 이용하면, (malloc이란 memory allocation을 줄인말로 입력받은 길이(byte)만큼 메모리공간을 할당하는 함수입니다. malloc(4)이란 4 bytes 만큼 메모리공간을 할당하란 뜻입니다. 기본적으로 (void *) 리턴타입을 가지고있기 때문에 포인터에 대입 시 (int *) 또는 (char *) 이런식으로 Type Casting 을 하셔야합니다. 아래에 malloc 쓰인 곳을 보시면 이해가 가실겁니다.)
#include <stdio.h>
#include <malloc.h> // malloc함수가 정의되 있는 파일을 불러옵니다.
int main()
{
int *arr; // 이런식으로 포인터변수를 선언하구요.
int size; // 사용자로부터 입력받을 배열의 크기
int i;
printf(“배열의 크기 입력: “); // 사용자로부터 배열의 크기 입력받음
scanf(“%d”, &size);
arr = (int *)malloc(sizeof(int) * size); // 입력받은 크기만큼 int 배열을 형성합니다. 정확히 말하면, 배열을 형성한다기보단 입력받은 만큼의 메모리공간을 할당하는 것이죠. 이렇게해서 형성된 arr 포인터변수는 배열을 사용하는 것처럼 같은 방법으로 값을 입력하거나 값을 가져올 수 있습니다.
printf(“값 입력\n”);
for (i = 0; i < size; i++)
{
printf(“arr[%d]: “, i);
scanf(“%d”, &arr[i]);
}
printf(“입력한 배열의 값 출력\n”);
for (i = 0; i < size; i++)
{
printf(“arr[%d]: %d\n“, i, arr[i]);
}
return 0;
}
'programming > c' 카테고리의 다른 글
재귀함수를 이용한 Factorial 함수 구현 (0) | 2010.06.11 |
---|---|
C call by value , call by reference (0) | 2010.06.11 |
링커 도구 경고 LNK4076) C 링크시 linking nonincrementally (1) | 2010.05.25 |
putc, putchar, fputc, or putw Subroutine (0) | 2010.05.25 |
[C] 논리, 비트 연산자 (0) | 2010.04.19 |