문제
아래 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번: 동일한 배열 객체가 아닌 포인터 산술은 엄밀히는 주의가 필요하지만 시험 문맥에서는 계산식으로 처리된다.
보충 개념 포인터 연산 문제는 주소값 자체보다 같은 타입 포인터 간 차이를 기준으로 해석한다.