22

是否可以在 C 中创建匿名的临时数组?

例如,假设我有一个调用函数processArray(int[] array),它以一个 int 数组作为其参数,我可以通过以下方式将一个匿名数组传递给它:

int main(){
 processArray( (int[]){0, 1, 2, 3} ); //can I create this type of array?
 return 0;
}

还是我必须事先声明数组(使用指针),然后将其指针传递给 processArray()?例如:

int main(){
 int[] myArray = {0, 1, 2, 3};
 processArray(myArray);
 return 0;
}
4

1 回答 1

30

使用 C99 和 C11,您可以编写自己编写的内容,如以下代码所示。这些是“复合文字”,在 ISO/IEC 9899:2011 §6.5.2.5 复合文字中进行了描述(与 ISO/IEC 9899:1999 中的相同部分)。

#include <stdio.h>

static void processArray(int n, int arr[])
{
    for (int i = 0; i < n; i++)
       printf(" %d", arr[i]);
    putchar('\n');
}

int main(void)
{
    processArray(4, (int[]){0, 1, 2, 3});
    return 0;
}

运行时,它会产生答案:

 0 1 2 3
于 2013-02-03T04:16:44.663 回答