C언어 이거 아시는분?

gonny95의 이미지

#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]);
}

숫자에 인덱스 연산자를 쓰는건 처음보는데 어떻게 된거죠?

ShaYEL의 이미지

몇 번 실험을 해보니 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와 동일합니다.

gonny95의 이미지

이제 이해가 됩니다 감사합니다

gilgil의 이미지

재미있네요. 좋은 정보 감사합니다.