Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[1531] 어렵네요.
이영우 [userof] 1454 읽음    2002-11-12 11:40
걍 제 생각대로 풀어봅니다만..틀릴수 있겠네요.
그렇지만 과감히.. -.-
아래처럼 코드짜면 밥숟가락 놓을거 같은데요..

ptrc는 4개의 문자열의 배열이고 ptrc는 처음 문자열을 가리킵니다.
st는 4개의 문자열의 처음을 가리키는 포인터 원소를 가진 배열이며,(역순입니다)
stt는 st의 포인터입니다.

1) **++stt
stt는 st라는 배열의 처음을 가리키는데 ++ 때문에 2번째 st의 원소를 뜻하므로,
*(*(++stt)) = *(st의 둘째 원소) = "미역국"
stt는 1 증가됩니다.

주의할 점은 **stt가 문자열을 뜻하는 것입니다.

2) *--*++stt+2
여기서 또 stt를 증가시킵니다. 산술연산자는 우선순위가 젤 뒤지요.
*++stt는 주소를 뜻합니다. ptrc+1이죠.
여기다가 *--이면 대입이 발생합니다.

결국 st가 (ptrc+3,ptrc+2,ptrc,ptrc)가 됩니다.
답은 st의 셋째원소인 ptrc의 문자열의 일부가 됩니다.
stt는 st의 셋째원소인 ptrc를 가르킵니다.

3) *stt[-2]+3

st의 셋재원소에서 뒤로 2칸 이동하면 ptrc+3이며
답은 프랑수의 일부입니다.

4) stt[-1][-2]
   (stt[-1])[-2]이므로 (stt의 둘째원소의 포인터)의 [-2]
   (st[1])의 [-2]이므로 ptrc라고 판단됩니다.


헉헉..어렵다..

라딘 님이 쓰신 글 :
: #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
:
: 이렇게 나오거든요...
:
: 여러가지 해봤는데...--;
: 일단 printf 를 1,2,3,4 로하면...
: 1번이 빠지면 에러가 뜨고 결과값에 2번답만 나오는거 같은데 캐나다가 나옵니다.
: 2번이 빠지면 에러가 뜹니다. 1번결과만 나오고요.
: 3번이 빠지면 에러 않뜨고 1,2,4번 결과가 맞게 나옵니다.
: 4번 역시 4번만 않나오고 1,2,3번 결과는 맞게 나옵니다.
:
: 무슨차이인가요?
:
: 그리고 printf 알려주세요...T.T
: **++stt
: *--*++stt+2
: *stt[-2]+3
: stt[-1][-2]+1
:
: 좀
:
: 그리고 1번에서 * 한개가 모자르 에러 2번에서 -- 가 없으면 캐나다가 2자리 빼고 나오고요
: 3번은[-2] 안에 숫자 바꾸면 안뜨고 +2 하면 공백으로 +1하면 한국이 3자리 빼고 나오고 0 역시
: 한국이 3자리 빼고나오고 -1 하면 미국이 앞에3자리빼고 나오고 -2는 원래값인 프랑스 3자리 빼고
: 나오는데... 캐나다는 않나오더군요. 4번은 앞에 [-1]을 -2로 하면 캐나다 1자리뺀수 0,+1 은 에러 +2는 공백 으로 나오는군요. 뒤에 [-2]를 -1은 캐나다 1자리빼고 0은 미국 1자리빼고 +1은 프랑스
: 1자리뺀수가 나오네요 [-1][-2] 이게 없으면 0*B 가 ??? 나오고 [+1][+2] 로하면 미국이 1자리 뺀수 나오네요...
: ㅡㅡ; 이케 하다 보니깐 먼가 생각이 난듯하면서 짜증이 나구 T.T 뒤죽박죽 되서요...
: 근데 확실히 쓰면서 하니깐 좋긴 좋은것 같네요 ^^
:
: printf에 걸린
: **++stt
: *--*++stt+2
: *stt[-2]+3
: stt[-1][-2]+1
:
: 이것좀 알려주세요

+ -

관련 글 리스트
1527 [질문] 포인터 printf 쪽만... T.T 라딘 1757 2002/11/11
1533     Re: 고마워요 T.T 생각한거랑 --; 완전... 달랐어요 T.T 라딘 1371 2002/11/12
1532     Re:[질문] 포인터 printf 쪽만... T.T laSuna 1457 2002/11/12
1545         Re:Re:[질문] 다시...요...죄송 라딘 1364 2002/11/14
1555             Re:Re:Re:[질문] 다시...요...죄송 laSuna 1450 2002/11/15
1570                 Re: 그렇쿤요... 고맙습니다. 라딘 1363 2002/11/15
1531     어렵네요. 이영우 1454 2002/11/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.