是否可以将数组发送到C函数而不先声明/定义它?
这可以用整数。
int add(int a, int b) {
return (a + b);
}
void main(void) {
int c;
int a=1, b=2;
/* With declaring (works fine)*/
c = add(a, b);
/* Without declaring (works fine)*/
c = add(1, 2);
}
对于数组,这是否还有什么内容?
#include <stdio.h>
void print_int_array(int *array, int len) {
int i;
for (i = 0; i < len; i++)
printf("%d -> %d\n", i, *array++);
}
void main(void) {
int array[] = {1, 1, 2, 3, 5};
/* With declaring (works just fine) */
print_int_array(array, 5);
/* Without declaring (fails to compile) */
print_int_array({1, 1, 2, 3, 5}, 5);
}
答案 0 :(得分:5)
是。您可以。在C99 / 11中,您可以使用compound literals:
后缀表达式,由带括号的类型名称后跟括号括起来组成 初始化列表是复合文字。它提供了一个未命名的对象,其值由初始化列表给出。 99)。
print_int_array((int[]){1, 1, 2, 3, 5}, 5);
99)请注意,这与强制转换表达式不同。例如,强制转换指定转换为标量类型
或仅void
,并且演员表达的结果不是左值。
答案 1 :(得分:4)
是的,因为c99可以使用复合文字:
print_int_array((int [5]) {1, 1, 2, 3, 5}, 5);
( ){ }
是复合文字运算符。复合文字提供了一种指定聚合或联合类型的未命名常量的机制。 (非常)复合文字是可修改的。