C++中根本不存在所谓的“数组形参”,因为数组在传入时,实质上只传入指向其首元素的指针:
void average(int ary[12]);//形参是一个int *
这种从数组到指针的自动转换被称之为“退化”。
如果数组的边界的精确数值非常重要,常见的做法是明确传入其长度:
void average_n(int ary[], int size);
但是更进一步,如果希望函数只接受含有特定数量的元素的数组,可以考虑使用一个引用形参:
void average(int (&ary)[12]);
当然,我们可以用模板来泛化:
template <int n>
void average(int ary[n]);//编译器会帮我们推到n的值
不过我们可以将这两种方式结合起来:
template <int n>
inline void average(int (&ary)[n])
{average_n(ary, n);}
更好的办法是,使用标准容器(vector等)来代替对数组的传统用法。