2013-08-10 3 views
2
#include<stdio.h> 
int main() { 
int buff[] = {1,2,3,4,5,6,9,10}; 
char c = (buff+1)[5]; 
printf("%d\n",c);//output is 9 
return 0; 
} 

누군가가 이런 일이 명확하게 어떻게 설명 할 수 까다로운 경우 왜배열 인덱싱 방법

+1

내가 그것을 9. –

답변

8

리콜 :

C에서 사각형 [ ] 암시 *(...) 있습니다 중괄호. 귀하가 제공 한 코드에 무슨 일


명확하지 포인터 연산이다. 이 라인 :

char c = *((buff + 1) + 5); 
어레이 (6 위치)에서 제 7 요소를 가리키는

... 및 역 참조 :

char c = (buff+1)[5]; 

합니다 ... (C 표준에서) 다음에 해당 그것. 그것은 출력 (9),하지 (19)

비고해야한다 : 대괄호에 대한 메모 다음

, 다음과 같은 동등한 것을 볼 것이 중요합니다. arr 배열과 n이다

arr[ n ] <=> n[ arr ] 

는 ... 수치이다. 더 복잡한 예제 :

' '[ "]; i < 0; i++; while (1); do something awesome (y)." ]; 

... 완전히 유효한 포인터 연산입니다.

+0

미안 편집 실수 –

+0

@Krishnasundar을 할 생각합니다, 당신의 편집 후 내 대답은 여전히 ​​의미합니다. –

+0

네, 이제 어떻게되는지 분명하게 알 수 있습니다. 고마워요. –

6
{1, 2, 3, 4, 5, 6, 9, 10}; 
|  | 
buff buff+1 = {2, 3, 4, 5, 6, 9, 10} (say buff_1) 
           | 
buff_1[5] =     9