본문 바로가기
프로그래밍언어/C 언어

[혼자 공부하는 C언어] void 포인터

by khsnote22 2022. 12. 16.

주소는 가리키는 자료형이 일치하는 포인터에만 대입이 가능합니다. 따라서 가리키는 자료형이 다른 주소를 저장하는 경우라면 void 포인터를 사용합니다. * void 포인터는 가리키는 자료형이 정해지지 않은 포인터이다.

#include <stdio.h>

int main()
{
    int a = 10; // int형 변수
    double b = 3.5; // double형 변수
    void *vp; // void 포인터
    
    vp = &a; // int형 변수의 주소 저장
    printf("a :%d\n", *(int *)vp);
    
    vp = &b; // double형 변수의 주소 저장
    printf("b : %.1lf\n", *(double *)vp);
    
    return 0;
}

void는 가리키는 자료형을 결정하지 않겠다는 뜻입니다.

void 포인터는 가리키는 자료형이 정해져 있지 않으므로 어떤 주소든 저장할 수 있습니다. 또한 같은 이유로 간접 참조 연산이나 정수를 더하는 포인터 연산이 불가능합니다. 간접 참조 연산을 하려면 몇 바이트를 어떤 형태로 읽어야 하는지 알아야 하는데, 어떤 주소가 올지 알 수 없으므로 연산이 불가능합니다. 정수 연산도 마찬가지입니다. 그러면 void 포인터는 어떻게 사용할까요? void 포인터를 사용할 때는 원하는 형태로 변환하여 사용합니다. 

 

형 변환 연산자와 간접 참조 연산자는 모두 단항 연산자로서 우선순위가 같습니다. 이 경우 연산순서는 오른쪽부터 왼쪽으로 차례로 연산합니다. 

void 포인터가 형 변환을 하지 않는 경우도 있나요?

대입 연산을 할 때는 형 변환 없이 voidㅇ포인터를 다른 포인터에 대입할 수 있습니다. 그래도 항상 명시적으로 형 변환하여 사용하는 것이 좋습니다. 


http://www.yes24.com/Product/Goods/74269921

 

혼자 공부하는 C 언어 - YES24

혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학

www.yes24.com