Возможно ли иметь анонимные, ad-hoc массивы в C?
Можно ли создавать анонимные, ad-hoc массивы в 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;
}
Ответы
Ответ 1
С C99 и C11 вы можете написать то, что вы написали, как показано в следующем коде. Это "сложные литералы", описанные в ISO/IEC 9899: 2011 §6.5.2.5. Компонентные литералы (и это тот же раздел в ИСО/МЭК 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