C 및 C에서 인덱스[배열]로 배열 액세스
면접관이 가끔 실시하는 지식 테스트에서 다음 코드가 표시됩니다.
int arr[] = {1, 2, 3}; 2[arr] = 5; // does this line compile? assert(arr[2] == 5); // does this assertion fail?
처음에는 2[arr] 표현식이 컴파일에 실패하는 것처럼 보일 수 있습니다. 정수를 배열 이름으로 사용하여 배열을 인덱싱하려는 것 같습니다. 그러나 이 예상치 못한 구문은 실제로 C와 C 모두에서 유효합니다.
이유를 이해하기 위해 이러한 언어에서 [] 연산자의 기술을 살펴보겠습니다.
C 및 C 배열 액세스 의미
C99 표준(6.5.2.1 단락 1)에 따르면 [] 연산자는 다음 형식의 인수를 기대합니다.
또한 같은 섹션의 단락 2에서는 E1[E2]가 다음과 동일하다고 설명합니다. (*((E1) (E2))). 이는 E1[E2] 표현식이 포인터 조작으로 해석될 수 있음을 나타냅니다.
결정적으로 표준 내에서는 []에 대한 인수 순서가 정상이어야 한다는 요구 사항이 없습니다. 따라서 2[arr] 표현식은 (*((2) (arr)))와 동일하게 처리됩니다.
따라서 예상대로 할당과 후속 어설션이 모두 성공합니다.
위 내용은 2[arr] = 5 C와 C에서 어설션을 컴파일하고 전달합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!