포인터는 주소를 저장한다.
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;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ std::array,std::vector (0) | 2019.07.30 |
---|---|
c++ 2중포인터,동적 2차원배열 (0) | 2019.07.29 |
c++ for-each문 반복문 (0) | 2019.07.29 |
c++ 포인터,참조의 구조체,클래스 멤버선택 (0) | 2019.07.29 |
c++ 참조변수,참조변수와 const (0) | 2019.07.26 |