> 백엔드 개발 > C++ > `&array[5]`는 배열 경계를 넘어서는 C의 유효한 포인터입니까?

`&array[5]`는 배열 경계를 넘어서는 C의 유효한 포인터입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-04 10:03:35
원래의
356명이 탐색했습니다.

Is `&array[5]` a Valid Pointer in C   Beyond Array Bounds?

배열 경계를 넘어 배열 구독 지점을 배열할 수 있습니까?

다음 코드가 C 표준을 준수하는지 여부에 대한 의문이 생깁니다.

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];
로그인 후 복사

구체적으로 이 맥락에서 &array[5]의 유효성은 다음과 같습니다.

C 표준

C99 초안 표준에 따름:

  • §6.5.2.1, 단락 2: "E1[E2]는 (*((E1)과 동일합니다. (E2)))"
  • §6.5.3.2, 단락 3(강조): "피연산자가 [] 연산자의 결과인 경우 & 연산자도 단항 *도 아닙니다. []가 암시하는 것은 평가되고 결과는 마치 & 연산자가 제거되고 [] 연산자가 a로 변경된 것과 같습니다. 연산자."
  • §6.5.6, 단락 8: "식 P가 배열 객체의 마지막 요소 하나 다음을 가리키는 경우, 식 (P) 1은 마지막 요소의 하나 다음을 가리킵니다. 배열 객체의 요소이고 표현식 Q가 배열 객체의 마지막 요소 하나 다음을 가리키는 경우 표현식 (Q) - 1은 배열의 마지막 요소를 가리킵니다. object."

결론

이러한 조항은 다음을 나타냅니다.

  • 포인터는 합법적으로 개체의 끝을 지나 한 요소를 가리킬 수 있습니다. 배열(역참조되지 않음).
  • &array[5]는 다음과 같습니다. &*(배열 5)는 (배열 5)와 동일합니다.
  • (배열 5)는 배열 끝을 지나서 하나를 가리킵니다.
  • &array[5]는 그렇지 않기 때문입니다. 역참조가 발생하면 C 표준에 따라 합법적입니다.

위 내용은 `&array[5]`는 배열 경계를 넘어서는 C의 유효한 포인터입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿