더듬이의 헬로월드

Hello, World!

프로그래밍 언어/C++ [기본]

[C++기본] 18.void 포인터

더듬이 2021. 9. 2. 21:42
728x90
void Test(){
. . .
. . .
}

함수에서 리턴을 하지 않는 경우에는 void라는 키워드는 작성한다.


void가 포인터와 만나면?

void* pvoid=nullptr;

포인터 변수 앞의 자료형은 그 역참조의 단위를 나타낸다.

즉, int포인터라면 역참조시 int형으로 바라볼 것이다.

그럼 void는, 어떤 의미를 가지고 있을까?

⇒주소값을 가지는 포인터 변수이지만, 아직 어떤 방식으로 역참조를 할지는

정해지지 않았다는 뜻이 된다.

        void* vpointer=nullptr;

        int a = 0;
        float b = 0.5f;
        double c = 0.05;
        long long d = 50;

        vpointer = &a;
        vpointer = &b;
        vpointer = &c;
        vpointer = &d;

따라서 이런 코드의 경우 오류가 나지 않는다.

void 포인터는 주소를 받아도 특정 데이터타입으로 해석을 하지 않기 때문이다.

*vpointer=50;

그래서 void포인터를 역참조 하는 경우에는 오류가 난다.

역참조를 하고 싶다면, 정확한 자료형을 다시 할당해 주어야 한다.

        void* vpointer=nullptr;

        int a = 510;
        vpointer = &a;

        int* ipointer = (int*)vpointer;
        cout << *ipointer << endl;

특징을 정리하자면 다음과 같다.

1.원본의 자료형을 정하지 않는다.

2.어떠한 타입의 변수의 주소든 다 저장 가능하다.

3.역참조가 불가능하다.

4.주소 연산이 불가능하다

728x90

'프로그래밍 언어 > C++ [기본]' 카테고리의 다른 글

[C++기본] 20.문자열-1  (0) 2021.09.23
[C++기본] 19.문자  (0) 2021.09.17
[C++기본] 17.const와 포인터  (0) 2021.08.31
[C++기본] 16.const, 상수  (0) 2021.08.31
[C++기본] 15.포인터와 배열  (0) 2021.08.30