58.9 연습문제: 구조체 포인터 변환하기

다음 소스 코드를 완성하여 "고길동"과 40이 출력되게 만드세요.

practice_type_conversion_struct_pointer.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Person {
    char name[20];
    int age;
};

int main()
{
    struct Person *p1 = malloc(sizeof(struct Person));
    void *ptr;

    strcpy(p1->name, "고길동");
    p1->age = 40;

    ptr = p1;

    printf("%s %d\n",                   ptr        ,                   ptr        );

    free(p1);

    return 0;
}

실행 결과

고길동 40

정답

((struct Person *)ptr)->name, ((struct Person *)ptr)->age

해설

void 포인터 ptr만 이용해서 구조체 멤버의 값을 출력해야 합니다. 따라서 ((struct Person *)ptr)->name과 같이 ptrstruct Person *로 변환하고 다시 괄호로 묶습니다. 그리고 -> 연산자를 사용하여 멤버에 접근하면 됩니다.