문제
다음 C언어 코드의 실행 결과는?
C#include <stdio.h> int main() { int n = 10; int *pt = &n; printf("%d", &n + 1 - &n + *pt); return 0; }
① 컴파일 에러 ② 10 ③ 11 ④ 21
정답
3번
해설
정답: 3. &n + 1 - &n의 포인터 차이는 1이고 *pt는 10이므로 결과는 1 + 10 = 11이다.
오답 풀이
- 1번: 시험 문맥에서는 같은 객체 기준 포인터 산술로 계산한다.
- 2번: 포인터 차이 1이 누락된 결과이다.
- 3번: 1 + 10 = 11이다.
- 4번: 주소값 자체를 정수처럼 더한 값이 아니다.
보충 개념 포인터끼리의 뺄셈은 바이트 차이가 아니라 같은 타입 원소 개수의 차이로 계산된다.