본문 바로가기
Category/정보처리기사

C언어 포인터 관련 계산 문제

by Corinee 2024. 10. 3.
728x90
반응형
#include <stdio.h>
 
int main() {
    int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int* parr[2] = {arr[1], arr[2]};
    printf("%d", parr[1][1] + *(parr[1]+2) + **parr);
    
    return 0;
}

주어진 코드를 하나씩 분석하여 출력값을 계산해보겠습니다.

코드 분석

배열 선언

1. int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

  • arr는 3x3 2차원 배열로, 값들은 다음과 같이 초기화됩니다:
arr[0][0] = 1, arr[0][1] = 2, arr[0][2] = 3
arr[1][0] = 4, arr[1][1] = 5, arr[1][2] = 6
arr[2][0] = 7, arr[2][1] = 8, arr[2][2] = 9

2. int* parr[2] = {arr[1], arr[2]};

  • parr는 포인터 배열로, 각 요소는 int* 타입입니다.
  • parr[0]은 arr[1]을 가리킵니다. 즉, parr[0]은 4, 5, 6의 배열을 가리킵니다.
  • parr[1]은 arr[2]을 가리킵니다. 즉, parr[1]은 7, 8, 9의 배열을 가리킵니다.

printf 계산

  1. parr[1][1]:
    • parr[1]은 arr[2]를 가리키므로, parr[1][1]은 arr[2][1]을 의미합니다.
    • arr[2][1]은 8입니다.
  2. *(parr[1] + 2):
    • parr[1]은 arr[2]를 가리킵니다. 즉, parr[1]은 배열 arr[2]의 첫 번째 요소를 가리키는 포인터(arr[2][0]).
    • parr[1] + 2는 arr[2]의 세 번째 요소인 arr[2][2]를 가리킵니다.
    • *(parr[1] + 2)는 arr[2][2]의 값을 의미하므로, 그 값은 9입니다.
  3. **parr:
    • parr은 포인터 배열입니다. parr[0]은 arr[1]을 가리킵니다.
    • 따라서, *parr은 arr[1]을 가리키는 포인터가 되고, **parr은 arr[1][0]을 의미합니다.
    • arr[1][0]의 값은 4입니다.

최종 계산

  • parr[1][1] + *(parr[1] + 2) + **parr의 값은:
    • 8 (parr[1][1]) + 9 (*(parr[1] + 2)) + 4 (**parr) = 21

출력값

  • 최종적으로 printf 문은 21을 출력합니다.

정답: 21