Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

냥집사의 개발일지

C언어 - void 포인터 (void Pointer) 본문

C언어

C언어 - void 포인터 (void Pointer)

깅햄찌 2022. 9. 19. 20:56
반응형

안녕하세요 오늘은 void 포인터에 대해 정리해보겠습니다. 

포인터, 배열 포인터, 함수 포인터에 이어 마지막 포인터 챕터가 되겠습니다.

 

1. void 포인터 선언

void + 간접 참조 연산자 + 포인터 변수

ex) void *vp

#include <stdio.h>

int main(){
    int x = 5;
    void *vp;

    vp = &x;
    printf("x = %d\n",*(int *)vp);
    
    return 0;
}

배열 포인터나 함수 포인터처럼 선언 방법이 어렵진 않지만

위의 코드에서도 알 수 있듯이 실제로 가리키는 값에 접근할 때 void 포인터의 자료형을 정해주어야 합니다.  

위의 코드에서는 void 포인터 vp를 정수 포인터형으로 형 변환시킨 뒤 간접 참조 연산자로 x의 값에 접근하였습니다. 

아래 결과에서도 vp가 정상적으로 5를 출력하는 것을 확인할 수 있습니다. 

 

2. void 포인터 활용 방법

자료형이 정해져있지 않고 추후에 자료형을 형 변환을 통해 사용할 수 있기에

같은 구조에 자료형이 다른 경우 void 포인터를 활용할 수 있습니다.

 

#include <stdio.h>


int main(){
    char x[6]  = "Hello"; 
    void *vp = x;

    printf("%s\n", (char *)vp);
    
    return 0;
}

1번 코드 양식 그대로 다만, vp의 자료형 형 변환을 통해 문자열을 출력했습니다. 

void 포인터 Tips

1. void 포인터에는 임의의 주소를 저장할 수 있습니다. 

2. void 포인터는 간접 참조 연산과 주소에 대한 정수 연산이 불가능합니다. 

오늘은 void 포인터에 대해 정리해보았습니다. 

void 포인터를 마무리로 포인터에 대한 정리는 마치도록 하겠습니다. 

다음 포스팅에는 메모리 동적 할당에 관해 알아보겠습니다 

감사합니다. 

좋은 하루 보내세요~

Comments