part1은 libc(3) 표준 라이브러리 함수 구현이다.
C언어에서는 기본적으로 자료형이 다른 포인터끼리 메모리의 주소를 저장하면 컴파일경고가 발생한다.
`int main(void) { int a = 10; char b = 'b'; int *int_point = &a; char *char_point = &b;
int_point = char_point; // 오류발생
return 0; }`
warning: assignment from incompatible pointer type
하지만 void 포인터 사용시 어떤 자료형의 포인터든 모두 저장할 수 있다.
`int main(void) { int a = 10; char b = 'b'; int *int_point = &a; char *char_point = &b;
void *ptr;
ptr = int_point; // 오류가 발생하지 않음 ptr = char_point;
int_point = ptr; char_point = ptr;
return 0; }`
하지만 역 참조는 불가능 하다!
따라서 사용방법은 함수의 오버로딩 형식처럼 가변적인 포인터변수를 받아야 하는 함수들에 인자값으로 주로 사용된다.