首页  >  文章  >  后端开发  >  为什么 C 函数中的数组参数“sizeof()”返回意外结果?

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

Susan Sarandon
Susan Sarandon原创
2024-11-11 07:31:02328浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn