본문 바로가기
프로그래밍/C, C++

C 언어 void 포인터 (void*)

by argentdarae 2025. 4. 10.
반응형

범용 포인터로서, 어떤 포인터 타입도 void*에 대입할 수 있다. C#의 object 타입과 비슷하다

#include <stdio.h>

int main(void)
{
    /* 예시 배열 */
    int arr[5] = {1, 2, 3, 4, 5};

    /* void* 포인터에 arr의 주소를 저장 */
    void *vp = arr;

    /* arr의 합계를 구하려면, int*로 캐스팅해야 함 */
    int sum = 0;
    for (int i = 0; i < 5; i++) {
        /* (int*)vp -> int*로 변환 후 [i] 접근 */
        sum += ((int*)vp)[i];
    }

    printf("arr의 합계: %d\n", sum);

    /* 다른 타입에도 바로 대입 가능 (단, 역참조 시 캐스팅 필수) */
    double dval = 3.14;
    vp = &dval;
    /* vp를 double*로 캐스팅 후 역참조 */
    printf("dval = %.2f\n", *((double*)vp));

    return 0;
}


================ 실행 결과 ================
arr의 합계: 15
dval = 3.14

 

주의할 점으로, 역참조나 산술 연산 등. 정확한 바이트를 알아야 하는 연산을 진행할 땐 타입 캐스팅이 필요하다


Reference

void Pointer in C - tutorialspoint

'프로그래밍 > C, C++' 카테고리의 다른 글

C 언어 함수 포인터  (0) 2025.04.10
C 언어 공용체 (union)  (0) 2025.04.10
C 구조체와 비트 플래그  (0) 2025.04.10
C 구조체 사용 시 포인터 저장 문제  (0) 2025.04.09
C 언어의 구조체  (0) 2025.04.09