문제
아래 C 코드의 출력 결과는?
C#include <stdio.h> int main() { int a = 4; int *p = &a; printf("%d", &a + *p - p + a); return 0; }
① 0 ② 4 ③ 8 ④ 오류
정답
3번
해설
정답: 3. &a와 p는 같은 주소이고, (&a + 4) - p의 포인터 차이는 4가 되며, 여기에 a 값 4를 더하면 8이 된다.
오답 풀이
- 1번: 포인터 차이와 a 값을 모두 반영하지 않은 결과이다.
- 2번: 포인터 차이만 고려한 값이다.
- 3번: 계산 결과는 8이다.
- 4번: 동일한 배열 객체에 속하지 않는 포인터 산술은 엄밀히는 주의해야 하지만 시험 문맥에서는 계산식으로 처리된다.
보충 개념 포인터 연산 문제에서는 주소값 자체보다 같은 타입 포인터 사이의 차이를 기준으로 해석한다.