공부/컴퓨터공학 (CS)

C++ void pointer(generic pointer), reinterpret_cast

leehe228 2021. 4. 17. 22:40
728x90
728x90

void pointer (generic pointer)는 모든 데이터 자료형의 주소를 저장할 수 있는 데이터 타입이다.

void* p;

 

모든 데이터 자료형의 주소를 저장할 수 있다.

int a = 10;
double b = 5.5;

void* p1 = &a;
void* p2 = &b;

 

void 포인터가 가르키는 대상의 타입을 알 수 없으므로 역참조가 불가능하다. 명시적 형변환을 통해 접근할 수 있다.

int a = 10;
void* p = &a;

cout << *p << endl; // 역참조 불가
cout << *(reinterpret_cast<int*>(p)) << endl; // 가능

int* b = reinterpret_cast<int*>(p); // 가능

 

reinterpret_cast() 는 static_cast() 보다 강력하지만, 안정성이 떨어진다. (C++ 규칙에서 허용하지 않는 캐스팅을 가능하도록 한다.) 주로 void* 타입을 명시적으로 캐스팅할 때 사용한다.

728x90
728x90