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 중국어 웹사이트의 기타 관련 기사를 참조하세요!