|
laSuna 님이 쓰신 글 :
: #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가 변화하지 않습니다.
:
: 이해되셨으면 좋겠네요^^
----------
3번째꺼에서요... 그러니깐 1 에서 st +1 2에서 st +2 3번에서
**(stt-2)+3 에서 어떻게 *(ptrc+3)+3 이 나오죠? stt 가 st+2 이깐대입해서 그런가요...
그러면 **(st+2 -2 )+3 이 되고 **(st)+3 이 되서 *(ptrc+3)+3 이 나오는것이면요
여기서 st가 0 그러니깐 st +0 가 되는 것인가요? st가 st+2 가 아니라면...
4번 문제가 않풀리는것 같아서요...3번에서 st가 0 가 되면
*(*(stt-1)-2)+1 에서 *(*(st +0 -1 )-2)+1 이 되는거 아닌가요?
죄송해요...--;.. 다시 알려주시면...
|