C-将数组发送到函数而不声明它

C-将数组发送到函数而不声明它,c,arrays,declaration,C,Arrays,Declaration,是否可以在不首先声明/定义数组的情况下将其发送到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); }

是否可以在不首先声明/定义数组的情况下将其发送到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);
}
#包括
无效打印数组(int*数组,int len){
int i;
对于(i=0;i%d\n”,i,*array++);
}
真空总管(真空){
int数组[]={1,1,2,3,5};
/*与声明(工作刚刚好)*/
打印数组(数组,5);
/*未声明(编译失败)*/
打印int数组({1,1,2,3,5},5);
}

是的,这是可能的,因为c99具有复合文字:

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

(){}
是复合文字运算符。复合文字提供了一种指定聚合或联合类型的未命名常量的机制。(非常量)复合文字是可修改的。

是。你可以。在C99/11中,您可以使用:

C11:6.5.2.5复合文字: 一种后缀表达式,由括号中的类型名和括号组成 初始值设定项列表是一个复合文本。它提供了一个未命名的对象,其值由初始值设定项列表给出。99)


99)请注意,这与强制转换表达式不同。例如,强制转换指定到标量类型的转换
或者只使用
void
,强制转换表达式的结果不是左值。

我选择了这个,因为省去了大小声明,以后更容易编辑。除了重复的问题外,第1个问题已经很好地介绍了。更深入地说,
print\u int\u array(int*array,int len)
,IMO,并不是一个很好地使用“复合文字”的例子,因为这样一个函数应该像
print\u int\u array(array,sizeof array/sizeof array[0])那样以最小的相互依赖性调用不确定在这里如何使用复合文字。
print_int_array((int[]){1, 1, 2, 3, 5}, 5);