在声明
中调用函数sum(int [], arr_size)
total = sum((int []){1,2,3,4,5}, 5);
复合文字 (int []){1,2,3,4,5}
作为参数传递。很明显,数组的长度由文字中的元素数量决定(这里当然是5
)。那么将5
作为另一个论点传递的需要是什么?
我们不能将上述函数定义为
sum(int []) {....}
然后将其称为
total = sum((int []){1,2,3,4,5})
答案 0 :(得分:8)
您的功能sum
与sum(int *, size_t)
相同;方括号只是语法糖。在任何时候都没有传递数组,实际上你不能在C中作为函数参数传递数组。因此,函数参数的“数组”部分中没有任何大小信息,并且大小必须是单独通过。
答案 1 :(得分:5)
你可以用这种方式定义sum
并按照你的例子中的说明调用它,但在这种情况下你将无法确定函数内部数组的大小。
您可以做的是将sum
声明为
int sum(int (*a)[5])
{
...
}
然后将其称为
total = sum(&(int []){1,2,3,4,5});
但在这种情况下,您将仅限于大小为5
的数组。如果你想拥有一个适用于任何大小的数组的函数,你必须从外面传递大小或者在数组中保留某种“终结符”元素