>백엔드 개발 >C++ >C와 C에서 `2[arr]`이 작동하는 이유는 무엇입니까?

C와 C에서 `2[arr]`이 작동하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-26 13:56:09750검색

Why Does `2[arr]` Work in C and C  ?

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

전통적인 배열 액세스 구문 2[arr]와 관련된 고전적인 인터뷰 질문에는 프로그래머들 사이에 호기심을 불러일으켰습니다. 배열의 세 번째 요소에 값을 할당하는 이 구문은 배열 이름과 인덱스의 순서가 뒤바뀌기 때문에 이상하게 보입니다.

C/C 사양에 따르면 이 비정통적인 접근 방식은 실제로 유효합니다. . C99 표준의 6.5.2.1 단락 1에서는 [] 연산자에 대한 인수에 "객체 유형에 대한 포인터" 유형의 표현식과 정수 표현식이 포함되어 있음을 명시적으로 명시하고 있습니다.

또한 단락 2에서는 [] 연산자는 (*((E1) (E2)))와 동일합니다. 여기서 E1은 배열 객체(또는 첫 번째 요소에 대한 포인터)를 나타내고 E2는 정수 인덱스를 나타냅니다. 이 정의는 연산자의 기능을 개략적으로 설명하지만 인수 순서에 어떤 제한도 두지 않습니다.

이는 인덱스가 배열 이름 앞에 오는 2[arr]와 같은 표현식이 구문상 유효하고 의미상 정확합니다. 표현식은 *(2 arr)로 평가되며 배열의 기본 주소에 2가 추가됩니다. 결과적으로 배열의 세 번째 요소가 성공적으로 타겟팅되고 수정되었습니다.

따라서 2[arr]의 역방향 구문은 단순한 컴파일러 트릭이 아니라 C 및 C 언어의 합법적인 기능으로, 프로그래머가 액세스할 수 있습니다. 비전통적이지만 완전한 기능을 갖춘 방식으로 요소를 배열합니다.

위 내용은 C와 C에서 `2[arr]`이 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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