C포인터 질문좀...
글쓴이: ekacl / 작성시간: 일, 2003/03/23 - 2:02오후
#include<stdio.h> int main() { char x[]="moldy\n",y[]="jello\n"; char *p[]={x,y}; static char **pp=p; **++pp-=2; printf("%s",*pp); *(p[0]+4)=*(*p+3); pp[-1][3]=*(*(pp-1)+2); ++*--pp; *++*pp='r'; *(*pp-2)=**p+5; printf("%s\n",pp[0]-2); }
이소스 출력하면
hello
world
라고 출력이 되는데...hello까지는 이해가 되는데...그뒤로는
도저히 혼자서 아무리생각해도 어떻게 그렇게 되는지 모르겠어요..ㅜㅜ
차근차근 설명해 주시면 정말 감사하겠습니다 ^^;;
Forums:
Re: C포인터 질문좀...
int main()
{
char x[]="moldy\n",y[]="jello\n";
char *p[]={x,y};
static char **pp=p;
**++pp-=2;
printf("%s",*pp);
위에는 j대신에 h 넣고 출력하라 (j-2 = h)
따라서 hello
*(p[0]+4)=*(*p+3);
첫번째 스트링에서 5번째배열에 4번째 문자를 넣어라
pp[-1][3]=*(*(pp-1)+2);
첫번째 스트링에서 4번째배열에 3번째문자를 넣어라
++*--pp;
pp포인터위치를 차라리 첫번째스트링(x) 의 두번째에 갔다놔라....
*++*pp='r';
어라 하나덜왔네.. 두번째가아니고 세번재로 옮기고 거기다가 r 을넣어두자
*(*pp-2)=**p+5;
어이쿠 이게아니었구나 다시두칸전의(그러니까 x배열의맨첨)에다가
r 보다 5큰문자(w) 를넣어두자 (따라서 현재 world 가완성)
printf("%s\n",pp[0]-2);
그럼 다시 금방넣었던곳부터 스트링을 출력해봐라...
끝...........
}[/code]
----------------------------------------------------------------------------
증말 감사 감사~~이해가 팍팍 되네요 ^^
증말 감사 감사~~
이해가 팍팍 되네요 ^^
p : p[0], p[1] (포인터 2개를 가짐)p[0]: mol
p : p[0], p[1] (포인터 2개를 가짐)
p[0]: moldy\n ( 배열 x[]를 가짐 )
p[1]: jello\n ( 배열 y[]를 가짐 )
pp : p를 가리키는 포인터
<-------------------------------------------------------------------------------
pp가 1 증가되어 y[]를 가리키게 되고 그 첫번째 문자를 -2 해줌 j->h
:pp만 y[] 배열을 가리킴
:y[]:hello\n (첫문자가 -2됨)
------------------------------------------------------------------------------->
<-------------------------------------------------------------------------------
p의 첫번째 배열(x)의 +4한 5번째 문자(y)를 배열(x)에서 +3한 4번째 문자(d)로 대치
:x[]: moldd\n
------------------------------------------------------------------------------->
pp[-1][3]=*(*(pp-1)+2);
<-------------------------------------------------------------------------------
y[]를 가리키는 pp에서 -1을 해줘서 x[]를 가리키게 되고 그 4번째 문자(d)에
pp에서 -1을 한 x배열에서 +2한 3번째 문자(l)를 대입
:x[]: molld\n
------------------------------------------------------------------------------->
++*--pp;
<-------------------------------------------------------------------------------
pp가 y[]배열을 가리키는 것에서 -를 한 x[]배열을 가리키게 되고 그 배열을 지칭
하는 포인터를 ++해서 x의 2번째 문자를 가리키게 지정
:pp가 x[]배열을 가리키게 됨
:x[]배열의 주소를 가지고 있는 p[0]의 주소가 +1됨 -> x+1을 가리킴 (pp 종속)
------------------------------------------------------------------------------->
*++*pp='r';
<-------------------------------------------------------------------------------
p[0]의 주소를 1증가시켜서 x+2를 가리키게 하고 가리킨 3번째 문자를 'r'로 교체
:x+1의 주소를 가지고 있는 p[0]의 주소가 +1됨 -> x+2를 가리킴 (pp 종속)
:x[]: morld\n
------------------------------------------------------------------------------->
*(*pp-2)=**p+5;
<-------------------------------------------------------------------------------
x+2를 가리키고 있는 pp에서 -2를 한 x[0]의 값에 x+2의 값을 가리키고 있는
p의 값(r)에 +5한 문자(w)를 입력함
:x[]: world\n
------------------------------------------------------------------------------->
댓글 달기