>백엔드 개발 >C++ >C 함수에 배열을 전달할 때 'sizeof'가 잘못된 배열 크기를 반환하는 이유는 무엇입니까?

C 함수에 배열을 전달할 때 'sizeof'가 잘못된 배열 크기를 반환하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-14 15:35:16861검색

Why Does `sizeof` Return an Incorrect Array Size When Passing an Array to a C Function?

함수에 전달할 때 배열 크기 불일치

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

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