Oczywiście że jest. W C (bez plusów), w standardzie C99, można stosować wywołanie narzucające typ danych w trakcie wykonania. Reguły wnioskowania domyślnych konwersji do typu docelowego, przekształcają, typ tablicy we wskaźnik na dane. https://en.cppreference.com/w/c/language/array sekcja Array to pointer conversion
#include <stdio.h>
void funkcja( int* tab )
{
do {
printf("%d ", *(tab++));
} while(*tab != 0);
}
int main(void)
{
funkcja( (int[]){ 1, 2, 3, 0 } );
return 0;
}
https://en.cppreference.com/w/c/language/compound_literal
Pamięć takiej tablicy alokowana jest w ramach ramki stosu funkcji wywołującej (w tym przypadku main(...) ) i poprawnie usunięta w przypadku zwinięcia ramki https://godbolt.org/z/ShNyY3 Nie następuje tu żadne alokowanie dynamiczne i nie wymaga to również żadnego dealokowania.
Nie jest natomiast to poprawne w C++. Tu od podobnych działań, masz r-referencję.