53.5 연습문제: 인적 정보를 초기화하기

다음 소스 코드를 완성하여 3,000명의 인적 정보를 모두 0으로 만드세요.

practice_struct_pointer_array.c

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

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

int main()
{
    ________________________________________

    ________________________________________
    ...
    _________________________________________ 

    printf("%d\n", p[2000]->age);

    for (int i = 0; i < sizeof(p) / sizeof(struct Person *); i++)
    {
        free(p[i]);
    }

    return 0;
}

실행 결과

0

정답

 struct Person *p[3000];


for (int i = 0; i < sizeof(p) / sizeof(struct Person *); i++)
{
    p[i] = malloc(sizeof(struct Person));
    memset(p[i], 0, sizeof(struct Person));
}

해설

p[2000]->age 와 같이 인덱스와 ->로 멤버에 접근하고 있으므로, 구조체 포인터 배열입니다. 따라서 struct Person *p[3000];과 같이 선언해줍니다. 그리고 인적 정보를 모두 0으로 만들라고 했으므로 구조체 포인터 배열의 첫 번째 인덱스부터 마지막 인덱스까지 반복하면서 malloc 함수로 메모리를 할당한 뒤 memset함수를 사용하여 메모리의 내용을 0으로 만들어주면 됩니다.