59.8 연습문제: 구조체 포인터와 포인터 연산

다음 소스 코드를 완성하여 30 60이 출력되게 만드세요.

practice_struct_pointer_add.c

#include <stdio.h>

struct Point2D {
    int x;
    int y;
};

int main()
{
    struct Point2D p[3] = { { 10, 20 }, { 30, 40 }, { 50, 60 } };
    struct Point2D *ptr;

    ptr = p;

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

    return 0;
}

실행 결과

30 60

정답

(ptr + 1)->x, (ptr + 2)->y

해설

구조체 배열 p에는 10, 20, 30, 40, 50, 60이 들어있습니다. 하지만 p로는 접근할 수 없고 구조체 포인터 ptr로 접근해야 하므로 포인터 연산을 사용해서 각 요소에 접근해야 합니다. 30은 두 번째 요소의 x이므로 (ptr + 1)->x과 같이 접근해주고, 60은 세 번째 요소의 y이므로 (ptr + 2)->y와 같이 접근해주면 됩니다.