2012-12-06 3 views
12

다음은 website에서 복사 한 코드입니다. direction에 설정된 값은 "nsew"의 각 문자를 인쇄합니다. 예를 들어이 코드의 출력은 문자 w입니다.이 C 배열 참조가 잘못된 이유는 무엇입니까?

어떻게 작동하는지 궁금합니다.

const char *p = "Hello"; 
char x = p[0]; 

const char *p = "Hello"; 
char x = 0[p]; 

이상한 동등하다 : 배열 첨자 연산자, 즉, 이것은, 가환 때문에

#include<stdio.h> 
void main (void){ 
    int direction = 3; 
    char direction_name = direction["nsew"]; 
    printf("%c",direction_name); 
} 

답변

17

이다? 귀하의 경우 문자열 리터럴 (배열)의 세 번째 위치 인 인덱스 "nsew"으로 인덱싱하고 있습니다.

some_ptr[n]*(some_ptr + n)과 같으며, 덧셈은 교환 가능하므로 *(n + some_ptr)과 같습니다. 그 다음에 n[some_ptr]도 동일한 표현식입니다.

그러나이 "기능"은 사용하지 않는 것이 좋습니다 ... 진지하게하지 마세요.

+5

+1 * 나는 그러나이 "기능"을 사용하는 것이 좋습니다 않을 것이다 * –

+1

또는 :'p [0]'은'* (p + 0)'와 같고'+'는 연관 적입니다. –

+0

Brian의 의견은 다음과 같이 반복됩니다. – msw

8

연산자 []은 포인터 연산과 동일한 의미를가집니다. 그래서 a[i]i[a]에 해당되는 *(i + a)에 해당합니다 *(a + i)하는 것과 같습니다

그래서 direction["nsew"] == "nsew"[direction] ==에 대한 "nsew"[3] == 'w'

+1

+1 나는이 설명을 좋아한다. 적어도 광기에 대한 방법이있다. –

관련 문제