44.6 연습문제: 포인터 연산과 역참조 사용하기
다음 소스 코드를 완성하여 55와 22가 각 줄에 출력되게 만드세요(Visual Studio, Windows).
practice_pointer_arithmetic_dereference.c
#include <stdio.h> int main() { int numArr[5] = { 11, 22, 33, 44, 55 }; int *numPtrA; void *ptr; numPtrA = &numArr[2]; ptr = numArr; printf("%d\n", ① numPtrA ); printf("%d\n", ② ptr ); return 0; }
실행 결과
55 22
정답
① *(numPtrA + 2) ② *((int *)ptr + 1) 또는 ② *(++(int *)ptr)
해설
numPtrA에는 numArr에서 세 번째 요소의 메모리 주소가 들어있습니다. 따라서 numPtrA로 다섯 번째 요소인 55를 출력하려면 포인터 연산으로 2를 더한 뒤 역참조하면 됩니다.
ptr은 void 포인터이므로 포인터 연산을 바로 할 수 없습니다. 따라서 int 포인터로 변환하여 1을 더한 뒤 역참조하거나 ++ 연산자를 앞에 붙여서 메모리 주소를 증가시킨 뒤 역참조하면 됩니다.