C 인터뷰 질문을 통해 다음과 같은 해결책으로 "sizeof 연산자를 사용하지 않고 C에서 배열의 크기를 찾는 방법은 무엇입니까?"라는 질문을 발견했습니다. 작동하지만 이유를 이해할 수 없습니다.
#include <stdio.h>
int main() {
int a[] = {100, 200, 300, 400, 500};
int size = 0;
size = *(&a + 1) - a;
printf("%d\n", size);
return 0;
}
예상대로 5를 반환합니다.
편집 : 사람들은 이 답변을 지적 했지만 구문은 약간 다릅니다. 즉 인덱싱 방법
size = (&arr)[1] - arr;
두 질문 모두 유효하며 문제에 대한 접근 방식이 약간 다릅니다. 엄청난 도움과 철저한 설명에 감사드립니다!
*((*(&array + 1)) - 1)
자동 배열의 마지막 요소를 얻기 위해 사용하는 것이 안전합니다? . TL; 박사 *(&a + 1)
를 발동 정의되지 않은 Behvaior
(ptr)[x]
동일합니다 *((ptr) + x)
.
&a + 1
그래서 유효하지 유효한 개체를 가리키는되지 않습니다.