문제
다음 C언어 프로그램이 실행되었을 때의 결과는?
① 55 ② 77 ③ 121 ④ 132
정답
3번
해설
정답: 3. 2차원 배열 a는 메모리에 11, 22, 44, 55 순으로 연속 저장된다. p = a[0]은 첫 원소(11)를 가리키므로 *(p+1)=22, *(p+2)=44, *(p+3)=55이다. i가 1부터 3까지 sum에 더하면 22 + 44 + 55 = 121이 되어 121이 출력된다.
오답 풀이
- 1번: 55는 마지막 원소 하나의 값으로 합이 아니다.
- 2번: 77은 *(p+0)부터 잘못 더한 값이다.
- 3번: 22 + 44 + 55 = 121이므로 정답이다.
- 4번: 132는 11 + 22 + 44 + 55에서 일부를 잘못 계산한 값이다.
보충 개념 2차원 배열은 행 우선(row-major)으로 연속 저장되며, 포인터 p에 정수를 더하면 원소 단위로 이동한다. *(p+i)는 a를 1차원으로 펼쳤을 때의 i번째 원소이다.