Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

포인터와 malloc 이용해서 배열크기 정하기

2010. 6. 11. 23:57programming/c

728x90

포인터와 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;

}

728x90