确定传递函数中的数组大小
问题出现在 C 中,其中确定传递给函数的数组的大小会导致由于 sizeof 无法准确捕获数组的长度,这是一个挑战。
一种流行的解决方案建议当数组元素 array[i] 达到 NULL 时终止循环。但是,这种方法可能会导致错误,因为 array[i] 有时在数组末尾附近包含随机垃圾值。
带有数组引用的基于模板的解决方案
C 通过模板和数组引用提供了更可靠的解决方案:
template <typename T, int N> void func(T (&a)[N]) { for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements }
这个基于模板的函数采用 T 类型的数组 a 和N 的固定大小。通过使用引用运算符 &,它将原始数组绑定到 a,允许在不显式传递大小的情况下访问数组的元素。
要使用此函数,只需声明一个数组并传递通过引用:
int x[10]; func(x);
需要注意的是,此解决方案仅适用于数组,而不是指针。对于基于指针的数组,更好的选择是使用标准模板库 (STL) 容器 std::vector,它提供大小和元素访问功能。
以上是如何可靠地确定传递给 C 函数的数组的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!