>백엔드 개발 >C++ >구독을 통해 C 배열의 끝을 지나서 주소를 얻는 것이 합법적인가요?

구독을 통해 C 배열의 끝을 지나서 주소를 얻는 것이 합법적인가요?

Patricia Arquette
Patricia Arquette원래의
2024-12-20 11:07:10874검색

Is Obtaining the Address One Past the End of a C   Array via Subscripting Legal?

One-Past-the-End 배열 주소 획득의 적법성 쿼리

질문

C에서 배열 요소의 주소를 사용할 수 있습니까? 다음 코드와 같이 끝 부분을 지나서 첨자를 통해 얻습니다. snippet?

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];

구체적으로 &array[5]는 C 표준을 준수합니까?

답변

예, 코드는 C 표준을 준수합니다.

설명

C99 초안에 따르면 표준:

§6.5.2.1, 단락 2:

대괄호 [] 안의 표현식이 뒤에 오는 후위 표현식은 배열 요소의 아래 첨자 지정입니다. object.

§6.5.3.2, 단락 3:

[& 연산자의] 피연산자가 [] 연산자의 결과인 경우 & 연산자나 []가 암시하는 단항 *가 모두 평가되지 않으며 결과는 다음과 같습니다. 마치 & 연산자가 제거되고 [] 연산자가 연산자로 변경된 것처럼

§6.5.6, 단락 8:

P 표현식이 배열 객체의 마지막 요소를 가리키는 경우 표현식(P) 1은 배열 객체의 마지막 요소 하나 다음을 가리킵니다.

기준 다음 발췌문은 다음과 같습니다.

  • & 연산자는 포인터의 주소를 생성합니다. 피연산자.
  • [] 연산자의 결과에 적용하면 & 연산자가 제거되고 [] 연산자가 연산자가 됩니다.
  • 배열의 마지막 요소를 가리키는 표현식 합법적으로 배열 끝 너머의 항목을 가리킬 수 있습니다.

따라서 &array[5] 표현식은 *(array 5)와 동일합니다. 배열의 마지막 요소를 지나 포인터가 역참조되지 않는 한 이는 표준에 따라 합법적입니다.

위 내용은 구독을 통해 C 배열의 끝을 지나서 주소를 얻는 것이 합법적인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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