
정답f()+f(3)+f(3,4)+f(3,4,5) = 3+6+9+12 = 30이 출력됩니다.
핵심 개념
C++ 디폴트 매개변수(default argument)
이 문제는 C++의 디폴트 매개변수 기능을 이해하고 있는지 묻습니다. 함수 f(int x=0, int y=1, int z=2)는 인수를 생략하면 선언 시 지정한 기본값이 대입됩니다. 따라서 f()는 x=0,y=1,z=2로 0+1+2=3, f(3)은 x=3만 전달되어 3+1+2=6, f(3,4)는 3+4+2=9, f(3,4,5)는 3+4+5=12가 됩니다. 이 네 값을 모두 더하면 3+6+9+12=30이 되어 최종 출력값이 결정됩니다.
선지별 해설
①40은 각 호출값 합계 30과 일치하지 않으므로 옳지 않습니다.
②f()=3, f(3)=6, f(3,4)=9, f(3,4,5)=12의 합이 정확히 30이므로 이 선지가 정답입니다.
③22는 디폴트값이 제대로 적용되지 않았을 때 나오는 값으로, 실제 계산 결과와 다릅니다.
④12는 마지막 호출 f(3,4,5) 하나의 값일 뿐 전체 합이 아니므로 틀렸습니다.

정답void형 포인터를 '아무것도 가리키지 않는 포인터'라고 한 설명은 틀렸습니다.
핵심 개념
C 언어의 배열과 포인터
이 문제는 C 언어에서 배열명과 포인터, 특히 void형 포인터의 의미를 정확히 아는지 묻는 '옳지 않은 것 고르기' 유형입니다. 배열명은 첫 원소의 주소를 나타내는 상수이고, 다차원 배열의 첨자 표현은 포인터 역참조로 변환할 수 있습니다. 핵심은 void형 포인터의 정의로, void 포인터는 '아무것도 가리키지 않는' 포인터가 아니라 자료형이 정해지지 않아 어떤 타입의 주소든 담을 수 있는 범용(generic) 포인터입니다. 아무것도 가리키지 않는 포인터는 NULL 포인터입니다.
선지별 해설
①배열명은 첫 번째 원소의 주소를 나타내며 재대입할 수 없는 상수처럼 취급되므로 옳은 설명입니다.
②a[i][j][k]는 포인터 연산으로 *(*(*(a+i)+j)+k)와 동일하게 해석되므로 옳습니다.
③void형 포인터는 타입이 지정되지 않아 어떤 자료형의 주소든 담을 수 있는 범용 포인터이며, '아무것도 가리키지 않는' 것은 NULL 포인터이므로 이 설명이 옳지 않아 정답입니다.
④ca, ca[0], &ca[0][0]은 모두 배열의 시작 주소로 동일한 메모리 위치를 가리키므로 옳습니다.