>  기사  >  백엔드 개발  >  C 함수의 배열 매개변수에 대해 `sizeof()`가 예기치 않은 결과를 반환하는 이유는 무엇입니까?

C 함수의 배열 매개변수에 대해 `sizeof()`가 예기치 않은 결과를 반환하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-11 07:31:02333검색

Why Does `sizeof()` Return Unexpected Results for Array Parameters in C   Functions?

sizeof()가 C 함수의 배열 매개변수에 대해 동일하게 작동하지 않는 이유

C에서 배열은 전달될 때 포인터로 붕괴됩니다. 함수, 배열 크기를 결정하는 데 sizeof() 사용을 신뢰할 수 없게 만듭니다. 이를 이해하기 위해 다음 함수를 분석해 보겠습니다.

int length_of_array(int some_list[])
{
    return sizeof(some_list) / sizeof(*some_list);
}

배열 매개변수 문제

some_list 매개변수가 배열로 선언되었지만 함수 서명은 다음과 같습니다. int length_of_array(int* some_list)와 사실상 동일합니다. 이는 배열이 함수 매개변수의 포인터로 붕괴되기 때문입니다.

sizeof()에 미치는 영향

이 맥락에서 sizeof(some_list)를 사용하면 포인터의 크기가 계산되어 결과적으로 1의 값으로. sizeof(*some_list)(정수 크기)로 나누면 1이 나옵니다.

주어진 예에서는 배열에도 불구하고 15개 요소를 포함하는 num_list의 경우, length_of_array() 함수는 출력에서 ​​볼 수 있듯이 일관되게 1을 반환합니다.

This is the output from direct coding in the
int main function:
15
This is the length of the array determined
by the length_of_array function:
1

템플릿 함수를 사용한 솔루션

배열 크기를 결정하려면 함수의 경우 템플릿 함수를 사용하고 참조로 배열을 전달할 수 있습니다.

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    return N;
}

이 경우 템플릿 매개변수 N은 배열의 알려진 크기를 캡처하여 sizeof()가 올바른 값을 반환할 수 있도록 합니다.

위 내용은 C 함수의 배열 매개변수에 대해 `sizeof()`가 예기치 않은 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.