2006/07/08 22:28
5["abcdef"]와 같은 이상한 표현
http://www.cinsk.org/cfaqs/html/node8.html#6.11
99년에 대학에 입학했으니, 지금껏 줄곧 열심히 하지는 않았지만 그래도 C를 해온지가 몇년째인가..
근데 이런건 정말 처음 본다.
아래는 신성국님이 번역한 C FAQ 의 일부분이다.
저런 식으로 같은 주소값을 가리킨다니 할말은 없지만, 그래도 신기한 거 하나 배웠다. ^^
오늘 날씨 와이리 덥노~
99년에 대학에 입학했으니, 지금껏 줄곧 열심히 하지는 않았지만 그래도 C를 해온지가 몇년째인가..
근데 이런건 정말 처음 본다.
아래는 신성국님이 번역한 C FAQ 의 일부분이다.
- Q 6.11
-
5["abcdef"]와 같은 이상한 표현을 봤습니다. 이것이 C 언어에서 쓸 수 있는 표현인가요? - Answer
- 쓸 수 있습니다. Subscript 연산자인
[]에는 교환 법칙 (commutative law)이 성립합니다.6.6a[e]는 어떤 expression a와 e에 대해, 하나가 포인터 expression이고, 하나가 정수 수식이란 전제 아래에서,*((a) + (e))와 완전히 같습니다 (identical). 이 증명은 다음과 같습니다:a[e]
어떤 C 책에서는 이런 것을 자랑삼아 보여주기는 하지만, `혼동스러운 C 컨테스트 (Obfuscated C Contest)'에 쓰이지 않는한, 따로 특별히 쓸모 있는 표현이 아닙니다 (질문
*((a) + (e)) (\EM{by definition})
*((e) + (a)) (\EM{by commutativity of addition})
e[a] (\EM{by definition})
20.36을 참고하기 바랍니다).C 언어에서 문자열은 char 타입 배열이기 때문에, "abcdef"[5]란 표현은 틀린 표현이 아니며, 'f'로 평가됩니다. 이 것을 다음 코드의 줄인 표현으로 생각할 수 있습니다:
char *tmpptr = "abcdef";
... tmpptr[5] ...
저런 식으로 같은 주소값을 가리킨다니 할말은 없지만, 그래도 신기한 거 하나 배웠다. ^^
오늘 날씨 와이리 덥노~
![[top]](/tt/skin/modern/images/btn_top.gif)