#include int main() {
int a[] = {1,2,3,4,5,5,6,7}; printf("%d\n", a[0]); 0[a] = 0; /* 정말 괴상하죠 */ printf("%d\n", 0[a]); printf("%d\n", a[0]); }
숫자에 인덱스 연산자를 쓰는건 처음보는데 어떻게 된거죠?
몇 번 실험을 해보니 a[i]와 i[a]가 동치인 듯 하네요
C99에서 (물론 C89도 마찬가지 일 것 같습니다만) [] 연산자는 단순히 덧셈을 하기 때문에 a[i]는 a+i와 같고 i[a]는 i+a와 같습니다.
덧셈에는 교환법칙이 성립하므로 같은 결과를 가진다고 볼 수 있습니다.
하지만 C++에서 []연산자는 C와는 그 성격이 다르므로 같은 결과를 기대하기는 어렵습니다.
E1[E2]는 *((E1)+(E2))와 같이 번역됩니다. 그리고 둘중 하나는 포인터 타입이고 다른 하나는 열거체 또는 정수형이어야 합니다. 그밖에 제한은 없습니다.
윗분은 기억에 혼란이 오신거 같군요. a+i가 아니라 *(a+i)입니다.
그리고 C++라고 다르진 않습니다. 물론 오버로딩된 경우에는 달라질 수 있습니다만 기본 동작은 C와 동일합니다.
이제 이해가 됩니다 감사합니다
재미있네요. 좋은 정보 감사합니다.
www.gilgil.net
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
몇 번 실험을 해보니 a[i]와 i[a]가 동치인 듯
몇 번 실험을 해보니 a[i]와 i[a]가 동치인 듯 하네요
C99에서 (물론 C89도 마찬가지 일 것
C99에서 (물론 C89도 마찬가지 일 것 같습니다만) [] 연산자는 단순히 덧셈을 하기 때문에 a[i]는 a+i와 같고 i[a]는 i+a와 같습니다.
덧셈에는 교환법칙이 성립하므로 같은 결과를 가진다고 볼 수 있습니다.
하지만 C++에서 []연산자는 C와는 그 성격이 다르므로 같은 결과를 기대하기는 어렵습니다.
E1[E2]는 *((E1)+(E2))와 같이
E1[E2]는 *((E1)+(E2))와 같이 번역됩니다.
그리고 둘중 하나는 포인터 타입이고 다른 하나는 열거체 또는 정수형이어야 합니다.
그밖에 제한은 없습니다.
윗분은 기억에 혼란이 오신거 같군요. a+i가 아니라 *(a+i)입니다.
그리고 C++라고 다르진 않습니다. 물론 오버로딩된 경우에는 달라질 수 있습니다만 기본 동작은 C와 동일합니다.
감사합니다
이제 이해가 됩니다 감사합니다
gilgil.net
재미있네요. 좋은 정보 감사합니다.
www.gilgil.net
댓글 달기