首页 > 后端开发 > C++ > 正文

为什么 C 函数中的数组参数'sizeof()”返回意外结果?

Susan Sarandon
发布: 2024-11-11 07:31:02
原创
367 人浏览过

Why Does `sizeof()` Return Unexpected Results for Array Parameters in C   Functions?

为什么 sizeof() 对于 C 函数中的数组参数的作用不同

在 C 中,数组在传递给函数,使得使用 sizeof() 来确定数组大小不可靠。为了理解这一点,我们来分析以下函数:

int length_of_array(int some_list[])
{
    return sizeof(some_list) / sizeof(*some_list);
}
登录后复制

数组参数的问题

参数 some_list 被声明为数组,但函数签名为实际上相当于 int length_of_array(int* some_list)。这是因为数组在函数参数中衰减为指针。

对 sizeof() 的影响

在此上下文中使用 sizeof(some_list) 计算指针的大小,结果值为 1。除以 sizeof(*some_list) (整数的大小)得到1.

示例

在给定的示例中,尽管数组 num_list 包含 15 个元素,但函数 length_of_array() 始终返回 1,如输出所示:

This is the output from direct coding in the
int main function:
15
This is the length of the array determined
by the length_of_array function:
1
登录后复制

使用模板的解决方案函数

要确定函数中的数组大小,可以使用模板函数并通过引用传递数组:

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    return N;
}
登录后复制

在这种情况下,模板参数 N 捕获已知大小数组的大小,允许 sizeof() 返回正确的值。

以上是为什么 C 函数中的数组参数'sizeof()”返回意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

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