> 백엔드 개발 > C++ > `sizeof()`가 함수 내부 및 외부 C 배열에 대해 다른 값을 반환하는 이유는 무엇입니까?

`sizeof()`가 함수 내부 및 외부 C 배열에 대해 다른 값을 반환하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-21 16:47:09
원래의
871명이 탐색했습니다.

Why Does `sizeof()` Return a Different Value for C Arrays Inside and Outside Functions?

함수 내에서 C-Array의 잘못된 Sizeof()

C-array를 다룰 때 함수에 전달될 때의 동작을 이해하는 것이 중요합니다. 이 질문은 함수 내부와 외부 배열의 sizeof() 값 사이의 놀라운 차이점을 조명합니다.

문제:

주어진 C 프로그램에서 배열 지점 크기 3이 선언되었으며 sizeof(point)/sizeof(point[0])을 사용하여 해당 크기를 올바르게 가져옵니다. 그러나 동일한 배열이 test() 함수에 전달되면 sizeof(arr)는 잘못된 값 2를 반환합니다.

이유:

배열이 다음과 같은 경우 C의 함수에 전달되면 첫 번째 요소에 대한 포인터로 붕괴됩니다. 결과적으로, 함수 매개변수의 sizeof()는 배열 자체가 아닌 포인터의 크기를 측정합니다. 이로 인해 test() 함수에서 잘못된 결과가 발생합니다.

해결책:

이 문제를 해결하려면 배열의 크기를 별도의 매개변수로 전달해야 합니다. 함수에:

void test(int arr[], size_t elems) {}
로그인 후 복사

main() 함수에서 배열 크기를 전달할 수 있습니다. using:

test(point, sizeof(point) / sizeof(point[0]));
로그인 후 복사

참고:

sizeof(point)/sizeof(point[0]) 계산은 동적 할당에 적용되지 않는다는 점에 유의하는 것이 중요합니다. 스택에 할당되지 않은 배열입니다.

위 내용은 `sizeof()`가 함수 내부 및 외부 C 배열에 대해 다른 값을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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