문제
다음 C 코드의 출력 결과는?
C#include <stdio.h> struct dat { int x; int y; }; int main() { struct dat a[] = {{1, 2}, {3, 4}, {5, 6}}; struct dat* ptr = a; struct dat** pptr = &ptr; (*pptr)[1] = (*pptr)[2]; printf("%d 그리고 %d", a[1].x, a[1].y); return 0; }
① 3 그리고 4 ② 5 그리고 6 ③ 1 그리고 2 ④ 5 그리고 4
정답
2번
해설
정답: 2. (*pptr)[1] = (*pptr)[2]는 a[2]의 구조체 값을 a[1]에 복사하므로 a[1]은 {5, 6}이 된다.
오답 풀이
- 1번: 대입 전 a[1]의 값이다.
- 2번: a[2]가 a[1]로 복사된 결과이다.
- 3번: a[0]의 값이다.
- 4번: x만 복사된다고 잘못 본 결과이다.
보충 개념
C에서 구조체 대입은 멤버 값을 통째로 복사한다. 포인터 배열 접근식 (*pptr)[i]는 ptr이 가리키는 배열의 i번째 원소를 의미한다.