개발 소발/개발 C++(기초)
c++ void pointer,generic pointer
우기!
2019. 7. 29. 10:40
포인터는 주소를 저장한다.
size에 상관없이 주소는 같다.
데이터 타입이 다르더라도 주소형식은 같다.
자료형과 상관없이 포인터(주소값)저장할때 사용한다.
void pointer는 generic pointer 라고한다.
void *ptr = nullptr;
ptr = &i;
void pointer의 한계
*를 사용한 de-reference가 안된다.
자료형을 알 수 없어 +1연산이 안된다.
void포인터형에서 값을 알려면 casting을 해야한다.
cout << *(static_cast<int*>(ptr)) << endl;
void포인터 사용이유
과거 다형성 구현할때 사용됬었다.
#include <iostream>
using namespace std;
enum Type {
INT,
FLOAT,
CHAR,
};
int main()
{
int i = 5;
float f = 3.4f;
char c = 'c';
void *ptr = nullptr;
ptr = &i;
ptr = &f;
ptr = &c;
//자료형을 알 수 없어 연산할 수 없다.
//cout << ptr + 1 << endl;
ptr = &i;
cout << *(static_cast<int*>(ptr)) << endl;
return 0;
}