首页 > 后端开发 > C++ > 为什么函数内部和外部的 C 数组的 sizeof() 返回不同的值?

为什么函数内部和外部的 C 数组的 sizeof() 返回不同的值?

Barbara Streisand
发布: 2024-12-21 16:47:09
原创
871 人浏览过

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

C 数组在函数内的误导性 Sizeof()

在处理 C 数组时,理解它们在传递给函数时的行为至关重要。这个问题揭示了函数内部和外部数组的 sizeof() 值之间的惊人差异。

问题:

在给定的 C 程序中,数组点为声明了 size 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]) 计算不适用于动态分配数组,未在堆栈上分配。

以上是为什么函数内部和外部的 C 数组的 sizeof() 返回不同的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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