是否可以在C中使用匿名的ad-hoc数组?

时间:2013-02-03 04:09:07

标签: c arrays

是否可以在C中创建匿名的ad-hoc数组?

例如,假设我有一个名为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;
}

1 个答案:

答案 0 :(得分:23)

使用C99和C11,您可以编写您编写的内容,如以下代码所示。这些是“复合文字”,在ISO / IEC 9899:2011 §6.5.2.5 Compound literals中有描述(它与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