58.8 연습문제: void 포인터 변환하기

다음 소스 코드를 완성하여 12가 출력되게 만드세요.

practice_type_conversion_void_pointer.c

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main()
{
    uint64_t *numPtr1 = malloc(sizeof(uint64_t));
    void *ptr;

    *numPtr1 = 12;

    ptr = numPtr1;

    printf("%llu\n",              ptr);

    free(numPtr1);

    return 0;
}

실행 결과

12

정답

*(uint64_t *)ptr

해설

uint64_t 포인터에 메모리를 할당한 뒤 역참조하여 12를 저장했습니다. 하지만 numPtr1void 포인터 ptr에 저장했고, printf에서도 ptr로 12를 출력하고 있습니다. 따라서 ptruint64_t 포인터로 변환한 뒤 역참조하면 12를 출력할 수 있습니다.