본문 바로가기
컴퓨터 공학/C, C++

[ C ] 포인터 이해하기6_void 포인터 개념 / 활용도

by hahehohoo 2020. 7. 19.
반응형

 

void 포인터 개념 / 활용도 

 

 

 

자료형이 정해지지 않은 포인터를 void 포인터라고 합니다. 

기본적으로 C언어는 자료형이 다른 포인터끼리 메모리 주소를 저장하면 컴파일 에러가 뜨지만

void 포인터는 자료형이 정해지지 않기 때문에 모든 자료형의 포인터를 저장할 수 있습니다. 

함수, void 포인터 다 가능합니다. 그래서 void 포인터는 범용 포인터라고 합니다. 

 

int main()
{
    int num1 = 10;
    int *numPtr1 = &num1;

    void *ptr;        // void 포인터 선언

    // 포인터 자료형이 달라도 컴파일 경고가 발생하지 않음
    ptr = numPtr1;    // void 포인터에 int 포인터 저장
    
    // 포인터 자료형이 달라도 컴파일 경고가 발생하지 않음
    numPtr1 = ptr;    // int 포인터에 void 포인터 저장
   
    return 0;
}

 

즉, 직접 자료형을 변환하지 않아도 암시적으로 자료형이 변환되는 방식입니다.

 

하지만 void 포인터는 자료형이 정해져 있지 않아 값이나 저장할 크기도 정해져 있지않습니다.

따라서 void 포인터는 역참조를 할 수 없습니다. 

참조 / 역참조란? 글 읽으러 가기 

 

ptr = numPtr1;        // void 포인터에 int 포인터 저장
printf("%d", *ptr);   // void 포인터는 역참조할 수 없음. 컴파일 에러

 

void 키워드로는 변수를 선언할 수 없습니다. 

 

void v1; // 컴파일 에러

 

그럼 역참조도, 변수 선언도 할 수 없는 void 포인터는 왜 사용할까요?

- 함수에서 다양한 자료형을 받아들일 때

- 함수의 반환 포인터를 다양한 자료형으로 된 포인터에 저장할 때

- 자료형을 숨기고 싶은 때

등 다양한 형태로 사용하고 있습니다. 

 

 

 

 

 

 

 

-----------------------------------

C언어 문법 총정리

목록 보러가기 

-----------------------------------

 

 

 

 

반응형


댓글