是否可以在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;
}
答案 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