在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
相关产品推荐
相关产品推荐

