是否有某种方法可以将int数组传递给C中的函数,如下所示:
/bin/bash
还是这样?
func(int[]{1, 2, 3});
我知道va_list的存在,但这并不是我想要的。
答案 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);
}