首页 >后端开发 >C++ >为什么在 C 中将数组传递给函数时 sizeof() 的行为不同?

为什么在 C 中将数组传递给函数时 sizeof() 的行为不同?

Barbara Streisand
Barbara Streisand原创
2024-11-11 17:56:031055浏览

Why Does sizeof() Behave Differently When Passing Arrays to Functions in C  ?

将数组传递给 C 中的函数时的 sizeof() 异常

在 C 中,sizeof() 运算符在处理数组时的行为有所不同传递给函数的值比在主函数中使用时的值要高。这种差异可能会让初学者感到困惑。

正确的数组传递

要正确地将数组传递给函数,必须使用引用传递它语法:

int length_of_array(int (&arr)[N]);

其中:

  • arr 是传递给函数的数组。
  • N 是一个整数常量,表示数组的大小。

使用 Sizeof()在函数中

在函数中使用 sizeof() 时,以下情况成立:

sizeof(arr) == N * sizeof(int);

解释:

  • sizeof(arr) 返回分配给数组的总内存大小,它是每个元素大小的 N 倍(sizeof(int)).

数组传递不正确的问题

在提供的代码片段中,函数 length_of_array() 无意中通过指针传递数组,像这样:

int length_of_array(int some_list[]);

这种不正确的传递方法会导致以下问题:

  • sizeof(some_list) 返回指向数组中第一个元素的指针的大小。
  • sizeof(*some_list) 返回 a 的大小数组中的单个元素。
  • 无论实际数组如何,这些值的除法始终结果为 1

使用模板的解决方法

要克服这一限制,可以使用基于模板的方法,如下所示:

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    std::cout << N << std::endl; // Will output the correct array size
    return N;
}

要点:

两种方法的本质区别在于通过引用传递数组与通过指针传递数组。前者保留了数组大小的信息,而后者则不然。

以上是为什么在 C 中将数组传递给函数时 sizeof() 的行为不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

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