Возможно ли иметь анонимные, 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