c - 可以在函数参数中声明一个数组吗?

标签 c

<分区>

有没有办法将整数数组传递给 C 中的函数,如下所示:

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

还是这样?

func({1, 2, 3});

我知道 va_list 的存在,但它并不是我要找的东西。

最佳答案

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

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

复合字面量看起来像一个强制转换后跟一个在强制转换中指定的类型的花括号初始值设定项。复合文字的范围是在引入它的语句 block 的末尾,因此它对找到对 func() 的调用的整个 block 都是有效的。因此,它对 func() 的整个调用都是有效的。并且复合文字是一个可修改的值。

我们可以有效地质疑函数的接口(interface)没有指定数组中有多少个值(那么 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);
}

关于c - 可以在函数参数中声明一个数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52159776/

相关文章:

c - scanf ("...%n",...) 匹配失败

mysql - 将变量放入sql查询中

c - 哪种排序对数据从升序到降序排序是有效的?

c - 包含 `main` 的多个文件的 Makefile

C scanf 有空格问题

c - 如何从c中的输入文件读取结构信息

使用 cryptoauthlib 配置 ATEC608A

c - 处理来自 XML 文件构建的 gtkwidget 的事件

在 OS X 上编译 Lex 程序

c - 在 C <stdio.h> 中使用 Switch-Case 语句时遇到问题