void 포인터

OpenJR·2024년 4월 1일

void에 알아보자
void는 형이 없다는 것을 보통 의미하며 main함수에서 보통 아래와 같이 사용되기도 한다.

int main () {
	return 0;
}
// or 
int main(void) {
	return 0;
}

void는 int x = 4;처럼 void x = 4;는 되지 않고 오로지 포인터로만 사용된다.

int x = 5;
void* xp = &x;

하지만 위에서 선언한 xp변수는 x를 int로 읽을지, float으로 읽을지 알 수 없다.
그렇기 때문에 printf할 수도 없고, 배열처럼 *(xp + 1) 메모리 증가도 할 수 없다.
그렇다면 왜 이런 녀석이 등장했을까?
이유는 mallocfree처럼 내부에 어떤 변수형이든 사용하기 위함이다.

int x = (int*)malloc(sizeof(int)*3);
free x;

위와 같이 동적할당하는 경우, malloc은 크기를 할당하지만 int로 캐스팅해주고, 만약 float이였다면 float*으로 캐스팅 해주었을 것이다. 이처럼, mallocvoid 포인터를 리턴하기 때문에 따로 캐스팅이 필요하다.
반대로, free 함수는 어떤 변수형의 포인터도 인자로 받기 위해 void 포인터를 인자로 받게 된다.

profile
Jacob

0개의 댓글