문제
아래 C 코드를 참고하여 값이 나머지 셋과 다른 것을 고르시오.
Cint ar[2][2] = {{11, 22}, {33, 44}}; int *p = &ar[0][0];
<보기 표현식>
ar[0][1]p[1]*(p + 1)**(ar + 1)
① ar[0][1] ② p[1] ③ *(p + 1) ④ **(ar + 1)
정답
4번
해설
정답: 4. ar[0][1], p[1], *(p+1)은 모두 배열의 두 번째 원소인 22를 의미한다. 반면 **(ar+1)은 두 번째 행의 첫 번째 원소인 ar[1][0], 즉 33을 의미한다.
오답 풀이
- 1번:
ar[0][1]은 22이다. - 2번:
p가&ar[0][0]을 가리키므로p[1]은 22이다. - 3번:
*(p+1)도p[1]과 같으므로 22이다. - 4번:
ar+1은 두 번째 행을 가리키고, 이를 역참조하면 두 번째 행의 시작 원소 33을 얻는다.
보충 개념
2차원 배열에서 ar은 행 단위 포인터처럼 동작한다. ar+1은 다음 행을 가리키며, **(ar+1)은 두 번째 행의 첫 번째 값을 의미한다.