배열 인덱싱의 일반적인 형식은 array[index]이지만 C와 C는 대체 구문을 제공합니다. 인덱스[배열]. 이 구문은 많은 프로그래머들을 의아하게 만들었지만 언어 사양에 따라 유효한가요?
int arr[] = {1, 2, 3}; 2[arr] = 5; // Does this compile? assert(arr[2] == 5); // Does this assertion fail?
이 트릭 질문은 교환 특성에 의존합니다. 덧셈. index[array] 연산은 *(index array)로 변환되고, 덧셈은 교환 가능하므로 2[arr]과 arr[2]가 동일하다고 가정할 수 있습니다. 그러나 이는 언어 사양에 명시적으로 명시되어 있지 않습니다.
예, C 및 C 사양에 따라 코드가 유효합니다.
C99 (6.5.2.1, 단락 1):
One of the expressions shall have type "pointer to object type", the other expression shall have integer type, and the result has type "type".
C99(6.5.2.1, 단락 2):
A postfix expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object. The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1 (counting from zero).
이 사양에는 인수 순서가 필요하지 않습니다. 제정신이 되려면 []로 하세요. 따라서 코드의 두 줄 모두 예상대로 컴파일 및 실행되며 어설션이 통과됩니다.
위 내용은 `index[array]`는 C와 C에서 유효한 배열 액세스 구문입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!