>백엔드 개발 >C++ >`index[array]`는 C와 C에서 유효한 배열 액세스 구문입니까?

`index[array]`는 C와 C에서 유효한 배열 액세스 구문입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-24 21:55:18290검색

Is `index[array]` a Valid Array Access Syntax in C and C  ?

C 및 C에서 인덱스[array]로 배열 액세스

배열 인덱싱의 일반적인 형식은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.