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

时间:2014-06-17 19:19:02

标签: 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);
}

对于数组,这是否还有什么内容?

#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);
}

2 个答案:

答案 0 :(得分:5)

是。您可以。在C99 / 11中,您可以使用compound literals

C11:6.5.2.5复合文字:

  

后缀表达式,由带括号的类型名称后跟括号括起来组成   初始化列表是复合文字。它提供了一个未命名的对象,其值由初始化列表给出。 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);

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