포인터 형변환

읏짜의 이미지

void* ptr 이렇게 선언된 포인터변수 ptr이
struct a{
...
}a;

구조체 a를 가리키는 포인터로 변환하려면 강제로 형변환을 해줘야하나요?
아니면 ptr = &a 이런식으로 하게되면 자동으로 형변환이 되는걸까요?

익명 사용자의 이미지

일단 선언된 포인터 ptr의 타입은 변하지 않습니다.

ptr = &a와 같은 코드에서는 &a의 타입이 struct a *에서 void *으로 변환되지요.

라스코니의 이미지

void *ptr 형은 만능 포인트형이라고 합니다. 어떤 타입의 구조체던지 포인터(어드레스)는 모두 동일한 크기입니다. 그래서 어떤 형의 데이터 형이던지 형변환을 통해서 접근할 수 있죠.

아래와 같이 응용할 수 있습니다.

struct _a a;
func((void *)&a);
 
void func(void *ptr)
{
    struct _a *a = (struct *_a)ptr;
    // do something
}