|
#include<stdio.h>
char *ptrc[]={"KOREA","CANADA","UNITED STATES OF AMERICA","FRANCE"};
char **st[]={ptrc+3,ptrc+2,ptrc+1,ptrc};
char ***stt=st;
void main()
{
printf("%s\n",**++stt);
printf("%s\n",*--*++stt+2);
printf("%s\n",*stt[-2]+3);
printf("%s\n",stt[-1][-2]+1);
}
위에꺼 돌려보면
united states of america
rea
nce
orea
-- 아마도 리포트인가봐요?
저두 학교 다닐 때 비슷한 문제로 골머리 썩은 적이 있는데... 나쁜 조교형들...
연구는 안허구 맨날 이상한거만 생각한다 했더니 요즘도 이런 분들이 있네용....
말씀드리기 전에 님의 프로그램은 컴파일러에 따라 결과가 다르게 나올 수도 있습니다.
포인터와 연산자를 어떻게 처리하느냐의 문제이니까요
그리고 제가 생각하기에는 배열과 포인터의 문제라서 복잡해보이는데
우선 연산자는 오른쪽에서 왼쪽으로 읽어가시면 되구요 배열은 포인터로 변환해보시면
답이 나올것 같습니다.
**++stt : **(stt + 1) -> **(st + 1) -> *(ptrc+2) -> united states of america
*--*++stt+2 : *(--*(++(st + 1))) + 2 -> *(--*(ptrc+1)) + 2
-> *(--("canada")) + 2 -> *("korea") + 2 -> rea
*stt[-2]+3 : **(stt - 2) + 3 -> *(ptrc + 3) + 3 -> *("france") + 3 -> nce
stt[-1][-2]+1 : *(*(stt-1)-2) + 1 -> *(ptrc+2-2) + 1 -> *("korea") + 1 -> orea
잘 읽어보시면 아시겠죠? stt의 위치가 계속 변경되는 것을 착안해서 읽어보세요
처음 두개는 stt가 하나씩 증가합니다. 그리고 세째, 네째 것은 stt가 변화하지 않습니다.
이해되셨으면 좋겠네요^^
|