首页 > 后端开发 > C++ > 将数组传递给 C 函数时,为什么'sizeof”返回不正确的数组大小?

将数组传递给 C 函数时,为什么'sizeof”返回不正确的数组大小?

Linda Hamilton
发布: 2024-12-14 15:35:16
原创
859 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板