배열 요소의 주소를 끝에서 한 번 더 가져올 수 있습니까?
다음 코드는 프로그래밍에서 논쟁의 대상이 되어 왔습니다. 커뮤니티:
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
구체적으로 &array[5]가 이 맥락에서 적법한 C 코드인지 여부에 대한 질문입니다.
C 표준의 입장
C 표준에 따르면 구체적으로 다음과 같습니다.
에 대한 의미 &array[5]
이 규칙을 &array[5]에 적용하면 다음과 같습니다.
합법인가요?
예, 합법입니다. 표준에서는 포인터가 역참조되지 않는 한 배열의 끝을 지나 한 요소를 가리키는 포인터를 명시적으로 허용합니다. 이 경우 &array[5]는 주소를 얻는 데만 사용되며 해당 주소의 값에 액세스하는 데 사용되지 않으므로 표준에서 허용하는 범위 내에 있습니다.
왜 차이점이 있습니까? 배열 5 또는 &array[4] 1?
&array[5]의 동작은 배열 5 또는 &array[4] 1과 다릅니다. []가 암시하는 단항 * 연산자의 동작과 결합된 및 [] 연산자의 우선 순위로 인해 발생합니다. 구체적으로:
반대로 &array[5]는 & 연산자가 제거되고 [] 연산자가 연산자로 변경되어 배열 5가 되는 것처럼 평가되지만 단항 연산자는 평가되지 않습니다. * 연산자.
위 내용은 C에서 배열 요소의 주소를 끝에서 한 번 더 가져오는 것이 합법적인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!