다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.
#include <stdio.h>
int main(){
int *arr[3];
int a = 12, b = 24, c = 36;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
printf("%d\n", *arr[1] + **arr + 1);
}
&와 역참조 연산자 *의 의미 확인*arr[1], **arr처럼 포인터 배열을 통해 값에 접근하는 방식 이해int *arr[3];
arr는 포인터들의 배열.int* 타입(정수를 가리키는 주소를 저장).int a = 12, b = 24, c = 36;
arr[0] = &a; // arr[0]은 a의 주소
arr[1] = &b; // arr[1]은 b의 주소
arr[2] = &c; // arr[2]은 c의 주소
arr[0]은 a를 가리킴, arr[1]은 b, arr[2]는 c.**arr[1] → arr[1]이 가리키는 값 → b = 24*arr[0] → arr[0]이 가리키는 값 → a = 12여기서 **arr는?
arr 자체는 배열 이름 → arr[0]과 같은 의미*arr → arr[0] (즉, &a)**arr → *(&a) → a = 12*arr[1] + **arr + 1
*arr[1] = 24**arr = 12+1즉,
24 + 12 + 1 = 37
arr[0] = &a, arr[1] = &b, arr[2] = &c*arr[1] = 24**arr = 1237
이 문제에서 꼭 알아야 할 개념:
arr는 배열 이름 → arr == &arr[0]*arr == arr[0], **arr == *arr[0]