将数组传递给 C 中的函数时的 sizeof() 异常
在 C 中,sizeof() 运算符在处理数组时的行为有所不同传递给函数的值比在主函数中使用时的值要高。这种差异可能会让初学者感到困惑。
正确的数组传递
要正确地将数组传递给函数,必须使用引用传递它语法:
int length_of_array(int (&arr)[N]);
其中:
使用 Sizeof()在函数中
在函数中使用 sizeof() 时,以下情况成立:
sizeof(arr) == N * sizeof(int);
解释:
数组传递不正确的问题
在提供的代码片段中,函数 length_of_array() 无意中通过指针传递数组,像这样:
int length_of_array(int some_list[]);
这种不正确的传递方法会导致以下问题:
使用模板的解决方法
要克服这一限制,可以使用基于模板的方法,如下所示:
template<size_t N> int length_of_array(int (&arr)[N]) { std::cout << N << std::endl; // Will output the correct array size return N; }
要点:
两种方法的本质区别在于通过引用传递数组与通过指针传递数组。前者保留了数组大小的信息,而后者则不然。
以上是为什么在 C 中将数组传递给函数时 sizeof() 的行为不同?的详细内容。更多信息请关注PHP中文网其他相关文章!