调用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})
?
调用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})
?
您的功能sum与sum(int *, size_t); 方括号只是语法糖。任何时候都没有传递数组,而且确实不能在 C 中将数组作为函数参数传递。因此,函数参数的“数组”部分中没有留下大小信息,大小必须单独传递。
您可以定义sum这种方式并如示例中所示调用它,但在这种情况下,您将无法确定函数内数组的大小。
你可以做的是声明sum为
int sum(int (*a)[5])
{
...
}
然后将其称为
total = sum(&(int []){1,2,3,4,5});
但在这种情况下,您将仅限于大小数组5。如果您想拥有一个适用于任何大小数组的函数,您必须从外部传递大小或在数组中保留某种“终结者”元素