함수에 전달할 때 배열 크기 불일치
sizeof() 연산자는 함수에 전달할 때 배열에 대해 부정확한 값을 보고합니다. 다음 코드 조각을 고려하십시오.
#include <stdio.h> void test(int arr[]) { int arrSize = (int)(sizeof(arr) / sizeof(arr[0])); printf("%d\n", arrSize); // 2 (incorrect) } int main() { int point[3] = {50, 30, 12}; int arrSize = (int)(sizeof(point) / sizeof(point[0])); printf("%d\n", arrSize); // 3 (correct) test(point); return 0; }
main()에서 호출되면 sizeof() 연산자는 배열의 크기를 정확하게 보고하지만 test() 함수 내에서는 크기를 한 요소만큼 과소평가합니다. . 이러한 불일치는 배열이 C의 함수에 전달될 때 배열의 첫 번째 요소를 참조하는 포인터로 붕괴되기 때문에 발생합니다. 결과적으로 sizeof(arr)는 기본 배열의 크기가 아닌 포인터의 크기를 계산합니다.
이 문제를 해결하려면 배열의 크기를 함수에 별도의 매개변수로 명시적으로 전달해야 합니다.
void test(int arr[], size_t elems) { // ... } int main() { int point[3] = {50, 30, 12}; // ... test(point, sizeof(point) / sizeof(point[0])); // ... }
또는 동적으로 할당된 배열(여기에는 표시되지 않음)의 경우 표준 C 라이브러리 함수 stdlib.h를 사용하여 배열의 값을 정확하게 얻을 수 있습니다. 크기입니다.
위 내용은 C 함수에 배열을 전달할 때 'sizeof'가 잘못된 배열 크기를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!