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` : 함수 선언 원형이 뜬다.