본문 바로가기
Programming/C++

void 포인터

by 꿈꾸는 띵땅근 2021. 3. 12.
학습 내용
1. void 포인터란?
2. 역참조
3. 

 

 

1. Void 포인터란?


void *ptr;

 

- 포인터 변수 자체의 크기는 4byte

 

 

 

 

 

2. 역참조(포인터가 가리키는 값을 불러오기)


역참조가 주의해야 할 사항이다. 

#include <stdio.h>
 
int main() {
    int a = 10;
    void *b = &a;
    printf("%d\n", *b);
}

이렇게 하면 에러뜬다. void포인터가 뭘 가리키는지 알려주지 않으면 컴파일러가 오류를 출력한다.

 

아래처럼 해야한다.

#include <stdio.h>
 
int main() {
    int a = 10;
    void *b = &a;
    printf("%d\n", *(int*)b);
}

 

 

추가 예시

#include <stdio.h>

int main()
{
    int num1 = 10;
    float num2 = 3.5f;
    char c1 = 'a';
    void *ptr;

    ptr = &num1;    // num1의 메모리 주소를 void 포인터 ptr에 저장
    // printf("%d\n", *ptr);         // 컴파일 에러
    printf("%d\n", *(int *)ptr);     // 10: void 포인터를 int 포인터로 변환한 뒤 역참조

    ptr = &num2;    // num2의 메모리 주소를 void 포인터 ptr에 저장
    // printf("%f\n", *ptr);         // 컴파일 에러
    printf("%f\n", *(float *)ptr);   // 3.500000: void 포인터를 float 포인터로 변환한 뒤 역참조

    ptr = &c1;      // c1의 메모리 주소를 void 포인터 ptr에 저장
    // printf("%c\n", *ptr);         // 컴파일 에러
    printf("%c\n", *(char *)ptr);    // a: void 포인터를 char 포인터로 변환한 뒤 역참조

    return 0;
}

 

 

 

 

 

 

참조


dojang.io/mod/page/view.php?id=495

 

C 언어 코딩 도장: 58.3 void 포인터 변환하기

void 포인터는 자료형이 정해져 있지 않으므로 역참조 연산을 할 수 없습니다. 하지만 void 포인터를 다른 자료형으로 변환하면 역참조를 할 수 있습니다. *(자료형 *)void포인터 type_conversion_void_point

dojang.io

 

댓글