void pointer
제네릭 포인터(generic pointer)라고도 불리는 void pointer는 모든 데이터 자료형을 가리킬 수 있는 특별한 타입의 포인터다. void 포인터는 void
키워드를 사용하여 일반 포인터처럼 선언한다.
void* ptr; // ptr is a void pointer
void 포인터는 모든 데이터 자료형의 객체를 가리킬 수 있다.
int nValue;
float fValue;
struct Something
{
int n;
float f;
};
Something sValue;
void* ptr;
ptr = &nValue; // valid
ptr = &fValue; // valid
ptr = &sValue; // valid
그러나 void 포인터는 어떤 데이터 자료형의 객체를 가리키는 알지 못하기 때문에 직접 역참조할 수 없다. 그러므로 역참조를 하기 전에 먼저 void 포인터를 다른 포인터 유형으로 명시적 형 변환 해야 한다.
int value = 5;
void* voidPtr = &value;
//cout << *voidPtr << endl; // illegal: cannot dereference a void pointer
int* intPtr = static_cast<int*>(voidPtr); // however, if we cast our void pointer to an int pointer...
cout << *intPtr << endl; // then we can dereference it like normal
// 5
Void pointer miscellany
void 포인터를 null 값으로 설정할 수 있다.
void* ptr = 0; // ptr is a void pointer that is currently a null pointer
일부 컴파일러에서는 동적으로 할당 된 메모리를 가리키는 void 포인터를 삭제할 수 있지만 정의되지 않은 동작이 발생할 수 있다.
포인터 산술은 포인터가 어떤 크기의 객체를 가리키는지 알아야 하므로 포인터를 적절하게 증감할 수 없는 void 포인터에서는 포인터 연산을 수행할 수 없다.
void 참조(reference) 같은 건 존재하지 않는다.
번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/613-void-pointers/ 입니다.
'C++ 이야기 > 07. 배열, 문자열, 포인터 및 레퍼런스' 카테고리의 다른 글
C++ 07.21 - std::array 소개 (3) | 2018.07.31 |
---|---|
C++ 07.20 - 이중 포인터와 동적 다차원 배열 (Pointers to pointers and dynamic multidimensional arrays) (0) | 2018.07.30 |
C++ 07.18 - 범위 기반 for 문 (range-based for statement) (0) | 2018.07.29 |
C++ 07.17 - Member selection with pointers and references (0) | 2018.07.28 |
C++ 07.16 - 참조와 const (Reference and const) (0) | 2018.07.27 |
카테고리의 다른 이야기 목록
-
2018.07.31
C++ 07.21 - std::array 소개
-
2018.07.30
C++ 07.20 - 이중 포인터와 동적 다차원 배열 (Pointers to pointers and dynamic multidimensional arrays)
-
2018.07.29
C++ 07.18 - 범위 기반 for 문 (range-based for statement)
-
2018.07.28
C++ 07.17 - Member selection with pointers and references
-
검색
-
다른 이야기 더 보기
-
모든 이야기 보기