배열 인수에 대한 함수에서 sizeof()가 다르게 동작하는 경우
C에서 배열을 함수에 전달할 때 다음 사항을 이해하는 것이 중요합니다. 왜 sizeof()가 메인에서 사용될 때와 유사하게 작동하지 않을 수 있습니까? function.
포인터로의 배열 붕괴
배열이 메소드와 속성을 가진 실제 객체인 Java와 같은 언어와 달리 C에서 배열은 단순히 포인터입니다. 배열이 함수에 인수로 전달되면 배열의 첫 번째 요소에 대한 포인터로 붕괴됩니다.
포인터와 배열의 sizeof()
주 함수에서 배열에 적용된 sizeof()는 모든 요소를 포함하여 배열의 전체 크기를 바이트 단위로 반환합니다. 그러나 함수 내의 배열에 대한 붕괴된 포인터에 sizeof()를 사용하면 포인터 자체의 크기를 반환하며, 이는 일반적으로 정수 유형의 크기입니다(예: sizeof(int)).
배열 크기 결정을 위한 해결 방법
포인터로 축소된 배열의 크기를 결정하려면 folgende 코드를 사용할 수 있습니다:
int length_of_array(int* some_list) { // Not applicable here, but see below for when it might be return 0; }
예외: 참조에 의해 전달된 배열
배열 붕괴 규칙에는 한 가지 예외가 있습니다. 배열은 참조로 전달되어 크기 정보에 액세스할 수도 있습니다. 이에 대한 구문은 다음과 같습니다.
template<size_t N> int length_of_array(int (&arr)[N]) { // Size of the array can be determined via the template parameter N return N; }
이 경우 N은 전달되는 배열의 크기를 나타내며 배열의 길이를 정확하게 결정하는 데 사용할 수 있습니다.
위 내용은 C 함수의 배열 인수에 대해 `sizeof()`가 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!