C语言是否存在语法简写技巧?能否直接传递数组字面量给函数?
C语言中直接使用初始化列表调用函数的问题
能否直接用do_some_work({ 0, 1, 2, 3, 4 });调用?
不行。{0,1,2,3,4}只是初始化列表,不属于合法的表达式,不能直接作为函数参数传递。但C99及以后标准支持复合字面量语法,把它包装成(int[]){0,1,2,3,4}后,就变成了一个可传递的匿名数组指针,就能直接用于函数调用。
是否必须先声明数组才能调用?
不需要提前声明数组变量。用复合字面量就能实现简写,直接在函数调用时创建临时匿名数组:
// 示例函数定义 void do_some_work(int *arr, int length) { // 数组处理逻辑 } // 直接用复合字面量调用 do_some_work((int[]){0,1,2,3,4}, 5);
这里的(int[]){0,1,2,3,4}会生成临时int数组,自动转换为指向首元素的指针供函数使用。这个临时数组的生命周期在当前表达式所在的作用域内有效(比如函数内部调用时,会持续到当前代码块执行结束)。
其他相关简写技巧
- 复合字面量支持结构体等复杂类型:
struct Point { int x; int y; }; void draw_point(struct Point p) { /* ... */ } // 直接传递匿名结构体 draw_point((struct Point){100, 200}); - 如果函数接受
const int*类型参数,用复合字面量传递会更简洁,省去额外定义数组变量的步骤。
内容的提问来源于stack exchange,提问作者user2980746
相关产品推荐
相关产品推荐

