반응형

void *memset(void *s, int c, size_t n);

이 함수는 s번지에서 n바이트만큼 c값으로 가득 채우는데 주로 배열 전체를 0으로 초기화할 때 사용된다. 실제 사용예를 보자.

int ari[10];
char arc[20];
double ard[30];

memset(ari,0,sizeof(ari));
memset(arc,0,sizeof(arc));
memset(ard,0,sizeof(ard));

이 함수의 첫 번째 인수 s가 void형 포인터로 되어 있기 때문에 정수형 배열, 문자형 배열, 실수형 배열을 구분하지 않고 모두 인수로 받아들일 수 있다. 함수를 호출할 때 실인수 값이 형식 인수로 대입되는데 형식인수가 void *형이므로 호출문에 캐스트 연산자를 쓸 필요 없이 배열 이름만 적으면 배열의 시작 번지를 나타내는 포인터 상수가 형식 인수로 전달될 것이다. memset 함수의 원형은 "시작 번지하고 길이만 던져, 몽땅 원하는 값으로 채워 주마"라는 것을 설명하고 있다.

만약 void형 포인터가 없다면 각각의 타입에 대해 memsetint, memsetchar, memsetdouble 같은 함수를 따로따로 만들어야 하므로 무척 불편할 것이다. memset 함수가 임의의 타입에 대해 메모리 채우기를 하기 위해서는 임의의 대상체에 대한 포인터를 모두 전달받을 수 있어야 하며 이럴 때 사용하는 것이 바로 void *형이다.

반응형

'C & C++ 관련' 카테고리의 다른 글

sizeof  (0) 2007.03.14
메모리 관리.  (0) 2007.03.14
소스, 아규먼트 받기  (0) 2007.03.14
Posted by Real_G