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

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

practice_type_conversion_pointer.c

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

int main()
{
    int *numPtr1 = malloc(sizeof(int));
    short *numPtr2;

    *numPtr1 = 0x11223344;

    __________________________________

    printf("0x%x\n", *numPtr2);

    free(numPtr1);

    return 0;
}

실행 결과

0x3344

정답

numPtr2 = (short *)numPtr1;

해설

numPtr1에 들어있는 메모리 주소에 0x11223344가 저장되어 있습니다. 여기서 가장 낮은 자릿수 두 바이트를 가져오려면 short 포인터에 넣은 뒤 역참조해야 합니다. 따라서 numPtr2 = (short *)numPtr1;과 같이 numPtr1short 포인터로 변환하여 numPtr2에 넣어주면 됩니다.