C언어 배열 에 관해서.. <포인터>

milk901의 이미지

안녕하세요 선배님들 궁금한게 있어서 글 올립니다.

이 부분에서 printf 문의 2번째 답이 -3이 나오는데 이 답이 이해가 잘 안됩니다..
왜 2번째 printf 문의 답이 -3인지 알려주시면 정말 감사하겠습니다.

int a[2][3] = {{-3,14,5},{1,-10,8}};
int *b[] = {a[0],a[1]};
int *p = b[1];


printf("%d ", (*b[1]));
printf("%d ", *(--p -2));
printf("%d ", *(*(a+1)+1));


raymundo의 이미지

 a
| -3 | 14 |  5 |  1 | -10 |  8 |
   ^              ^
   |              |
 b[0]           b[1]
                 p

p는 int * 이니 +1 또는 -1을 할 때마다 int 크기만큼 증가 또는 감소하고,
--p 해서 1감소, 또 -2 해서 2감소 하면 int 3개 크기만큼 감소하여
-3 이 저장된 주소값이 됩니다.

좋은 하루 되세요!

milk901의 이미지

오! 정말 감사합니다
좋은 하루 되세요!