You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C语言中能否一行调用接收数组参数的函数?无需声明变量

能否直接一行调用函数跳过数组变量声明?

先看原函数实现:

void my_foo1(char ** my_par, int size) {
    for (int i=0; i<size; i++) printf("%s\n",my_par[i]);
}

void my_foo2(int * my_par, int size) {
    for (int i=0; i<size; i++) printf("%d\n",my_par[i]);
}

常规调用方式是先声明数组再传参:

char * my_strs[3]={"hello","world","!!!!"};
my_foo1(my_strs,3);

int my_ints[3]={1,2,3};
my_foo2(my_ints,3);

答案是可以,利用C99引入的复合字面量特性,就能直接一行完成调用,无需提前声明数组变量:

调用my_foo2的写法

直接用复合字面量生成匿名int数组,数组会自动退化为int*类型匹配函数参数:

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

调用my_foo1的写法

同理,生成匿名的char*数组,退化为char**类型传递:

my_foo1((char*[]){"hello", "world", "!!!!"}, 3);

注意事项

  • 复合字面量是C99及以上标准支持的特性,若使用的编译器不兼容C99(如部分老旧版本的MSVC),则无法正常编译。
  • 作为函数参数的临时复合字面量,生命周期仅覆盖当前表达式执行过程,函数调用期间它是有效的,完全满足需求。

内容的提问来源于stack exchange,提问作者Stef1611

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:15:16