可以在函数参数中声明数组吗?

时间:2018-09-04 06:07:12

标签: c

是否有某种方法可以将int数组传递给C中的函数,如下所示:

/bin/bash

还是这样?

func(int[]{1, 2, 3});

我知道va_list的存在,但这并不是我想要的。

1 个答案:

答案 0 :(得分:2)

看起来您正在寻找复合文字(在C11 §6.5.2.5 Compound literals中定义;也是C99中的功能):

func((int[]){ 1, 2, 33, 491 });

复合文字看起来像是强制类型转换,后跟用于强制类型转换的指定初始化类型。复合文字的范围是在引入它的语句块的末尾,因此它将对找到对func()的调用的整个块有效。因此,它在对func()的整个调用中均有效。复合文字是可修改的值。

我们可以有效地查询该函数的接口,而不指定数组中有多少值(因此func()如何知道数组有多大),但这与复合的想法有些关系文字符号。

该函数本身是一个使用数组参数的完美普通函数:

extern void func(int arr[]);

void func(int arr[])
{
    …
}

或者,当然:

extern void func(int *arr);

void func(int *arr)
{
    …
}

并且(有关该函数如何知道数组的大小的主要警告),您可以编写:

void calling_func(void)
{
    func((int[]){ 1, 2, 33, 491 });
    int array[] = { 2, 99, 462, -9, -31 };
    func(array);
}