2

调用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})

?

4

2 回答 2

8

您的功能sumsum(int *, size_t); 方括号只是语法糖。任何时候都没有传递数组,而且确实不能在 C 中将数组作为函数参数传递。因此,函数参数的“数组”部分中没有留下大小信息,大小必须单独传递。

于 2013-06-28T22:52:31.103 回答
5

您可以定义sum这种方式并如示例中所示调用它,但在这种情况下,您将无法确定函数内数组的大小。

你可以做的是声明sum

int sum(int (*a)[5]) 
{
  ...
}

然后将其称为

total = sum(&(int []){1,2,3,4,5});

但在这种情况下,您将仅限于大小数组5。如果您想拥有一个适用于任何大小数组的函数,您必须从外部传递大小或在数组中保留某种“终结者”元素

于 2013-06-28T22:58:20.800 回答