2011-11-18 8 views
-3

가능한 중복 :
In C arrays why is this true? a[5] == 5[a]왜 C++에서 x [y] == y [x]입니까?

누군가가 내가 처음에 그들을 믿지 않았다 그러나 그것은 작동하지 않습니다 ... 저에게이 말했다. x와 y는 코드를 통해 변경하지 않으면, 왜이 작업을 수행합니다

int x [5] = { 0,1,2,3,4}; 
int y = 3; 

if(x[y] == y[x]){ 
    cout << "Why..." << endl; 
} 

어떻게 인덱스 Y에서 X 배열의 값이 =입니다 않습니다 배열 Y에서 X 지수의 값의? 그러나 y 어레이가 없었습니다.

+4

이것은 여러 가지 FAQ에서뿐만 아니라 여기에 너무 많은 시간을 들었습니다. C FAQ 링크 : http://c-faq.com/aryptr/joke.html – AnT

+0

agh 중복 됨 – Gabe

답변

6

그것은 INT는 고유하고 교환 법칙이 성립 운영자 ==를 가지고 있기 때문에,이 항상 true가됩니다

a[i] --> *(a+i) --> *(i+a) --> i[a] 

(정상 연산자 == 위해) 항상 true입니다

+0

@delnan : 어떻게 그런 질문을하지 않았습니까? 두 식은 동일한 포인터 추가에 대한 포인터 역 참조입니다. –

+2

더 중요한 것은,'int *'는 과부하 된'operator []'가 없기 때문입니다! –

+0

@KerrekSB : 좋은 지적. – sehe

3

다음 모두 동일하기 때문에 : x[y] 때문에

x[y] == y[x] == *(x+y) == *(y+x) 
2

*(x + y)을 말하는 또 다른 방법이며, 그 *(y + x)과 동일합니다.

+0

"* (x + y)'라고하는 또 다른 방법은'* (y + x)'와 같습니다. –

+0

아니요,'* (x + y)'를 말하고 있습니다. & x [y]'는'x + y'를 말합니다. –

+0

@ Martins Right. :) –