[C++] void 포인터(void*)
2024. 3. 14. 11:04ㆍProgramming Language/C++
void
• 함수에 반환 타입이 없을 때 사용
void Func()
{
int a = 0;
}
void*
• 포인터가 가리키는 곳의 타입(자료형)이 정해지지 않았을 때 사용한다.
가능 | 불가능 |
• 모든 타입의 변수(주소) 저장 | • 역참조 • 주소 연산 |
▶ 가능
void* pVoid = nullptr;
`pVoid`가 가리키는 곳의 타입이 정해지지 않았기 때문에 변수(주소)가 어떤 타입이든 다 저장할 수 있다.
즉, int형이든 double형이든 상관이 없다는 뜻이다.
int main()
{
// 자료형*
int* pInt = nullptr;
char c = 0;
pInt = &c; // 오류
// void*
void* pVoid = nullptr;
int i = 0;
float f = 0.f;
double d = 0.;
long l = 0;
long long ll = 0;
pVoid = &i; // 가능
pVoid = &f; // 가능
pVoid = &d; // 가능
pVoid = &l; // 가능
pVoid = ≪ // 가능
return 0;
}
▶ 불가능
1. 역참조가 불가능하다.
• 역참조 : 주소를 통해 값에 접근하는 것
`자료형*`일 때는 `*포인터변수`로 주소에 접근할 수 있다.
`int*`의 경우 가리키는 곳의 크기가 4byte라는 것을 알기에 역참조를 할 수 있다.
하지만 `void*`는 포인터가 가리키는 곳의 타입이 정해져있지 않아 그 크기가 얼마인지 모르기 때문에 역참조가 불가능하다.
int main()
{
int* pInt = nullptr;
*pInt; // 역참조 가능
void* pVoid = nullptr;
//*pVoid; // 오류 => 역참조 불가능
return 0;
}
2. 주소 연산이 불가능하다.
`void*`은 타입이 정해져 있지 않아서 '한 단계 증감한다'의 '한 단계'도 정해져 있지 않으므로 주소 연산을 할 수 없다.
int main()
{
void* pVoid = nullptr;
//pVoid + 1; // 오류 => 주쇼 연산 불가능
return 0;
}
'Programming Language > C++' 카테고리의 다른 글
[C++] 동적 할당, malloc()/free() vs. new/delete (0) | 2024.03.15 |
---|---|
[C++] 아스키(ASCII) 코드 (0) | 2024.03.14 |
[C++] const와 포인터 (0) | 2024.03.14 |
[C++] 문제 풀어보기[포인터, 변수] (풀이 및 설명 포함) (0) | 2024.03.13 |
[C++] 포인터(Pointer), 포인터 배열 (0) | 2024.03.12 |