> 백엔드 개발 > C++ > C 함수의 배열 인수에 대해 `sizeof()`가 다르게 동작하는 이유는 무엇입니까?

C 함수의 배열 인수에 대해 `sizeof()`가 다르게 동작하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-12 01:35:02
원래의
846명이 탐색했습니다.

Why Does `sizeof()` Behave Differently for Array Arguments in C   Functions?

배열 인수에 대한 함수에서 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 (&amp;arr)[N])
{
    // Size of the array can be determined via the template parameter N
    
    return N;
}
로그인 후 복사

이 경우 N은 전달되는 배열의 크기를 나타내며 배열의 길이를 정확하게 결정하는 데 사용할 수 있습니다.

위 내용은 C 함수의 배열 인수에 대해 `sizeof()`가 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿