“复合文字”作为论证

时间:2013-06-28 22:50:15

标签: c function-parameter compound-literals

在声明

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

你可以用这种方式定义sum并按照你的例子中的说明调用它,但在这种情况下你将无法确定函数内部数组的大小。

您可以做的是将sum声明为

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

然后将其称为

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

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