배열 요소의 주소를 C 표준에서 허용하는 끝을 한 단계 넘어서고 있습니까?
아래 코드 조각은 다음에 대한 논의를 불러일으켰습니다. C 표준에 따른 유효성:
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
구체적으로는 &array[5] 이 문맥에서 적법한 C 표현은 무엇입니까?
C 표준에 따른 적법성
C 표준에서는 이 표현의 적법성을 다음과 같이 정의합니다.
해석
이러한 규칙을 &array[5]에 적용하면 have:
&array[5] = &*(array + 5) = (array + 5)
(배열 5)는 배열의 끝을 지나 1을 가리키고 역참조되지 않으므로 C 표준에 따른 합법적인 표현입니다.
C 표준과의 비교
이 동작은 C 표준과도 일치합니다. 표준은 역참조되지 않는 한 배열 끝 너머의 요소 주소를 가져올 수 있도록 허용합니다.
다른 처리 이유
처리 결정 array 5와 &array[4] 1은 다음 표현식의 서로 다른 목적에 뿌리를 두고 있습니다.
위 내용은 C 배열의 끝을 한 번 지나서 주소를 사용하는 것이 합법적인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!