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 (&arr)[N]) { return N; }
이 경우 템플릿 매개변수 N은 배열의 알려진 크기를 캡처하여 sizeof()가 올바른 값을 반환할 수 있도록 합니다.
위 내용은 C 함수의 배열 매개변수에 대해 `sizeof()`가 예기치 않은 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!