>백엔드 개발 >C++ >&array[5]는 One-Past-the-End 배열 요소에 액세스하기 위한 유효한 C 표현식입니까?

&array[5]는 One-Past-the-End 배열 요소에 액세스하기 위한 유효한 C 표현식입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-27 00:44:11513검색

Is &array[5] a Valid C   Expression for Accessing the One-Past-the-End Array Element?

&array를 사용하여 One-Past-the-End 배열 요소에 액세스[5]

질문:

&array[5]는 one 요소를 참조하는 유효한 C 코드 표현식으로 간주됩니다. 배열의 끝을 지났습니까?

답변:

예, &array[5]는 C 표준에 따라 적법한 C 코드로 간주됩니다.

자세한 설명:

C99 표준:

  • 6.5.2.1, 단락 2: 아래 첨자 연산자 []를 (((E1) (E2)와 동일하게 정의합니다. )), 여기서 E1은 배열 객체이고 E2는 정수.
  • 6.5.3.2, 단락 3: & 연산자의 피연산자가 [] 연산자의 결과인 경우 & 연산자와 묵시적인 단항 *가 평가되지 않음을 나타냅니다. , 결과적으로 & 연산자가 제거되고 [] 연산자가 연산자로 대체됩니다.

C 표준:

  • 6.5.6, 단락 8: 역참조되지 않는 경우 포인터가 배열의 마지막 요소 하나를 지나갈 수 있도록 허용합니다.

이러한 기준에 따라 &array[5] 표현식은 다음과 같이 평가됩니다. 다음:

  • &(&array[5]) = &(배열 5)
  • &*(배열 5) = 배열 ​​5

배열 5는 배열의 끝을 지나서 1을 가리키고 역참조되지 않으므로 &array[5]는 유효한 표현입니다.

C 표준과의 비교:

이 점에서 C 표준은 C 표준과 일치합니다.

처리 이유 배열 5 또는 &array[4] 1과 다른 점:

&array[5]와 array 5 또는 &array[4] 1과 같은 표현식의 주요 차이점은 용도에 있습니다. 배열 5와 &array[4] 1은 배열의 시작 부분에서 오프셋된 포인터를 얻기 위해 명시적으로 포인터 연산을 수행하는 반면, &array[5]는 [] 연산자를 사용하여 해당 오프셋에 있는 요소에 직접 액세스합니다. 이러한 구별을 통해 프로그래머는 명시적인 포인터 연산을 수행하지 않고도 배열의 끝을 더 쉽게 참조할 수 있습니다.

위 내용은 &array[5]는 One-Past-the-End 배열 요소에 액세스하기 위한 유효한 C 표현식입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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