Programming/C++
[C++] void
콩순이컴퓨터
2025. 6. 27. 18:29
어떤 함수가 반화할 게 없을 경우에는 '무'라는 의도로 `void`를 사용한다. 이때 `void`라는 키워드는 `포인트`랑 섞일 때가 있다.
포인터(*) 앞에 자료형의 의미는 ? 포인터변수에 저장된 주소로 다시 갔을 때 원본의 형태를 어떤식으로 볼지를 정한다.
- `void* pVoid = nullptr;` : 자료형을 정하지 않은 포인터로 어떤 변수의 주소든지 다 받을 수 있다.
void의 특징
1. 원본의 자료형을 정하지 않는다.
2. 어떠한 타입을 가진 변수의 주소든 다 저장이 가능하다.
3. 역참조 불가능 (자기가 가리키고 있는 곳을 해석하는 자료형이 없기 때문)
4. 주소 연산 불가능 (+1을 할 때 몇 바이트 증가시켜야 하는지 모르기 때문)
void* pVoid = nullptr;
float* pFloat = nullptr;
{
int a = 0;
float f = 0.f;
double d = 0.;
long long ll = 0;
pVoid = &a;
pVoid = &f;
pVoid = &d;
pVoid = ≪
*pVoid; //불가능
pVoid += 1; //불가능
}
포인터에서 제일 중요한 것
- 원본 데이터가 실제로 어떻게 사용되고 있는지는 포인터와는 무관한다.
- 포인터는 선언 시점 때, 해당 포인터에 선언된 자료형이 무엇인지에 따라 주소를 어떻게 접근하고, 어떻게 분석하고, 어떻게 연산할지는 포인터 쪽에서 이미 다 정해놓았다. 그리고 포인터는 딱 그대로만 동작을 한다. 따라서 메모리 공간에 데이터를 저장했을 때 그 데이터대로 사용하려면 해당 데이터의 타입에 정확하게 매칭되는 포인터로 가리켜줘야 문제가 없다.
참고
- `Ctrl + Shift + Space` : 함수 선언 원형이 뜬다.